mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	bpo-45953: Preserve backward compatibility on some PyThreadState field names. (GH-31038)
The gevent project is using the two `PyThreadState` fields I renamed in gh-30590. This PR fixes the names. See #msg412046.
This commit is contained in:
		
							parent
							
								
									64568acbd8
								
							
						
					
					
						commit
						f78be59c83
					
				
					 2 changed files with 9 additions and 6 deletions
				
			
		|  | @ -187,16 +187,19 @@ struct _ts { | |||
|     /* The following fields are here to avoid allocation during init.
 | ||||
|        The data is exposed through PyThreadState pointer fields. | ||||
|        These fields should not be accessed directly outside of init. | ||||
|        This is indicated by an underscore prefix on the field names. | ||||
| 
 | ||||
|        All other PyInterpreterState pointer fields are populated when | ||||
|        needed and default to NULL. | ||||
|        */ | ||||
|        // Note some fields do not have a leading underscore for backward
 | ||||
|        // compatibility.  See https://bugs.python.org/issue45953#msg412046.
 | ||||
| 
 | ||||
|     /* The thread's exception stack entry.  (Always the last entry.) */ | ||||
|     _PyErr_StackItem _exc_state; | ||||
|     _PyErr_StackItem exc_state; | ||||
| 
 | ||||
|     /* The bottom-most frame on the stack. */ | ||||
|     CFrame _root_cframe; | ||||
|     CFrame root_cframe; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -776,9 +776,9 @@ init_threadstate(PyThreadState *tstate, | |||
|     tstate->recursion_limit = interp->ceval.recursion_limit, | ||||
|     tstate->recursion_remaining = interp->ceval.recursion_limit, | ||||
| 
 | ||||
|     tstate->exc_info = &tstate->_exc_state; | ||||
|     tstate->exc_info = &tstate->exc_state; | ||||
| 
 | ||||
|     tstate->cframe = &tstate->_root_cframe; | ||||
|     tstate->cframe = &tstate->root_cframe; | ||||
|     tstate->datastack_chunk = NULL; | ||||
|     tstate->datastack_top = NULL; | ||||
|     tstate->datastack_limit = NULL; | ||||
|  | @ -1016,10 +1016,10 @@ PyThreadState_Clear(PyThreadState *tstate) | |||
|     Py_CLEAR(tstate->curexc_value); | ||||
|     Py_CLEAR(tstate->curexc_traceback); | ||||
| 
 | ||||
|     Py_CLEAR(tstate->_exc_state.exc_value); | ||||
|     Py_CLEAR(tstate->exc_state.exc_value); | ||||
| 
 | ||||
|     /* The stack of exception states should contain just this thread. */ | ||||
|     if (verbose && tstate->exc_info != &tstate->_exc_state) { | ||||
|     if (verbose && tstate->exc_info != &tstate->exc_state) { | ||||
|         fprintf(stderr, | ||||
|           "PyThreadState_Clear: warning: thread still has a generator\n"); | ||||
|     } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Eric Snow
						Eric Snow