mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 19:34:08 +00:00 
			
		
		
		
	Issue #23783: Fixed memory leak in PyObject_ClearWeakRefs() in case of
MemoryError.
This commit is contained in:
		
						commit
						be1c60c3f6
					
				
					 1 changed files with 4 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -900,11 +900,9 @@ PyObject_ClearWeakRefs(PyObject *object)
 | 
			
		|||
    if (*list != NULL) {
 | 
			
		||||
        PyWeakReference *current = *list;
 | 
			
		||||
        Py_ssize_t count = _PyWeakref_GetWeakrefCount(current);
 | 
			
		||||
        int restore_error = PyErr_Occurred() ? 1 : 0;
 | 
			
		||||
        PyObject *err_type, *err_value, *err_tb;
 | 
			
		||||
 | 
			
		||||
        if (restore_error)
 | 
			
		||||
            PyErr_Fetch(&err_type, &err_value, &err_tb);
 | 
			
		||||
        PyErr_Fetch(&err_type, &err_value, &err_tb);
 | 
			
		||||
        if (count == 1) {
 | 
			
		||||
            PyObject *callback = current->wr_callback;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -922,8 +920,7 @@ PyObject_ClearWeakRefs(PyObject *object)
 | 
			
		|||
 | 
			
		||||
            tuple = PyTuple_New(count * 2);
 | 
			
		||||
            if (tuple == NULL) {
 | 
			
		||||
                if (restore_error)
 | 
			
		||||
                    PyErr_Fetch(&err_type, &err_value, &err_tb);
 | 
			
		||||
                _PyErr_ChainExceptions(err_type, err_value, err_tb);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -954,7 +951,7 @@ PyObject_ClearWeakRefs(PyObject *object)
 | 
			
		|||
            }
 | 
			
		||||
            Py_DECREF(tuple);
 | 
			
		||||
        }
 | 
			
		||||
        if (restore_error)
 | 
			
		||||
            PyErr_Restore(err_type, err_value, err_tb);
 | 
			
		||||
        assert(!PyErr_Occurred());
 | 
			
		||||
        PyErr_Restore(err_type, err_value, err_tb);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue