Изменения в подсчете ссылок Python в версии 3.14 для объектов CC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Изменения в подсчете ссылок Python в версии 3.14 для объектов C

Сообщение Anonymous »

Я поддерживаю старый код C/SWIG для Python, и в Python 3.14 произошел сбой, который не был проблемой в предыдущих версиях. Valgrind показал недопустимое чтение и последующий SIGSEV в free_object:

Код: Выделить всё

==33284== Invalid read of size 8
==33284==    at 0x4A56345: free_object (object.c:918)
Виной всему оказался счетчик ссылок: комментирование старых вызовов Py_DECREF:

Код: Выделить всё

        Py_DECREF(self->rowNames);
Py_DECREF(self->colNames);
исправлен сбой.
Имена строк и имена столбцов обрабатывались в коде одинаково; Целью процедуры было сохранение этой информации в словаре для маринования. Соответствующие биты:

Код: Выделить всё

        PyObject* rownames;
if (!self->rowNames){
Py_IncRef(Py_None);
rownames = Py_None;
} else {
rownames = self->rowNames;
}

[...]

PyObject *dictObj = Py_BuildValue("{sSsisLsLsOsOsi}",
"array", arrayBytes,
"nDims", nDims,
"dim1", dim1,
"dim2", dim2,
"rownames", rownames,
"colnames", colnames,
PICKLE_VERSION_KEY, PICKLE_VERSION);
[...]

return dictObj;
Полный контекст можно увидеть по адресу https://github.com/sys-bio/roadrunner/b ... s.cpp#L823
Я пытаюсь разобраться в этой ситуации: почему сбой в версии 3.14, а не

Подробнее здесь: https://stackoverflow.com/questions/798 ... -c-objects
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»