Skip to content

Commit 2efa0bd

Browse files
committed
Post merge fixups
1 parent 2a361c9 commit 2efa0bd

File tree

3 files changed

+22
-5
lines changed

3 files changed

+22
-5
lines changed

Include/refcount.h

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,23 @@ static inline void Py_DECREF_MORTAL(const char *filename, int lineno, PyObject *
398398
}
399399
}
400400
#define Py_DECREF_MORTAL(op) Py_DECREF_MORTAL(__FILE__, __LINE__, _PyObject_CAST(op))
401-
#define Py_DECREF_MORTAL_SPECIALIZED(op, destruct) Py_DECREF_MORTAL(op)
401+
402+
403+
404+
static inline void _Py_DECREF_MORTAL_SPECIALIZED(const char *filename, int lineno, PyObject *op, destructor destruct)
405+
{
406+
if (op->ob_refcnt <= 0) {
407+
_Py_NegativeRefcount(filename, lineno, op);
408+
}
409+
_Py_DECREF_STAT_INC();
410+
if (!_Py_IsImmortal(op)) {
411+
_Py_DECREF_DecRefTotal();
412+
}
413+
if (--op->ob_refcnt == 0) {
414+
destruct(op);
415+
}
416+
}
417+
#define Py_DECREF_MORTAL_SPECIALIZED(op, destruct) _Py_DECREF_MORTAL_SPECIALIZED(__FILE__, __LINE__, op, destruct)
402418

403419
static inline void Py_DECREF(const char *filename, int lineno, PyObject *op)
404420
{

Objects/floatobject.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,18 +151,18 @@ _PyStackRef _PyFloat_FromDouble_ConsumeInputs(_PyStackRef left, _PyStackRef righ
151151
PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
152152
if (Py_REFCNT(left_o) == 1) {
153153
((PyFloatObject *)left_o)->ob_fval = value;
154-
PyStackRef_CLOSE(right);
154+
PyStackRef_CLOSE_SPECIALIZED(right, _PyFloat_ExactDealloc);
155155
return left;
156156
}
157157
else if (Py_REFCNT(right_o) == 1) {
158158
((PyFloatObject *)right_o)->ob_fval = value;
159-
PyStackRef_CLOSE(left);
159+
PyStackRef_CLOSE_SPECIALIZED(left, _PyFloat_ExactDealloc);
160160
return right;
161161
}
162162
else {
163163
PyObject *result = PyFloat_FromDouble(value);
164-
PyStackRef_CLOSE(left);
165-
PyStackRef_CLOSE(right);
164+
PyStackRef_CLOSE_SPECIALIZED(left, _PyFloat_ExactDealloc);
165+
PyStackRef_CLOSE_SPECIALIZED(right, _PyFloat_ExactDealloc);
166166
if (result == NULL) {
167167
return PyStackRef_NULL;
168168
}

Python/ceval.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ dump_item(_PyStackRef item)
163163
static void
164164
dump_stack(_PyInterpreterFrame *frame, _PyStackRef *stack_pointer)
165165
{
166+
_PyFrame_SetStackPointer(frame, stack_pointer);
166167
_PyStackRef *locals_base = _PyFrame_GetLocalsArray(frame);
167168
_PyStackRef *stack_base = _PyFrame_Stackbase(frame);
168169
PyObject *exc = PyErr_GetRaisedException();

0 commit comments

Comments
 (0)