mirror of
https://github.com/psycopg/psycopg2.git
synced 2024-11-25 02:13:44 +03:00
Added TO_STATE() marker to work around cpychecker refcount issue
See davidmalcolm/gcc-python-plugin#109
This commit is contained in:
parent
79ba3a9573
commit
22edcd3d0e
|
@ -1392,7 +1392,7 @@ conn_tpc_begin(connectionObject *self, xidObject *xid)
|
|||
|
||||
/* The transaction started ok, let's store this xid. */
|
||||
Py_INCREF(xid);
|
||||
self->tpc_xid = xid;
|
||||
self->tpc_xid = (xidObject *)TO_STATE((PyObject *)xid);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1337,13 +1337,13 @@ connection_setup(connectionObject *self, const char *dsn, long int async)
|
|||
);
|
||||
|
||||
if (0 > psycopg_strdup(&self->dsn, dsn, -1)) { goto exit; }
|
||||
if (!(self->notice_list = PyList_New(0))) { goto exit; }
|
||||
if (!(self->notifies = PyList_New(0))) { goto exit; }
|
||||
if (!(self->notice_list = TO_STATE(PyList_New(0)))) { goto exit; }
|
||||
if (!(self->notifies = TO_STATE(PyList_New(0)))) { goto exit; }
|
||||
self->async = async;
|
||||
self->status = CONN_STATUS_SETUP;
|
||||
self->async_status = ASYNC_DONE;
|
||||
if (!(self->string_types = PyDict_New())) { goto exit; }
|
||||
if (!(self->binary_types = PyDict_New())) { goto exit; }
|
||||
if (!(self->string_types = TO_STATE(PyDict_New()))) { goto exit; }
|
||||
if (!(self->binary_types = TO_STATE(PyDict_New()))) { goto exit; }
|
||||
self->isolevel = ISOLATION_LEVEL_DEFAULT;
|
||||
self->readonly = STATE_DEFAULT;
|
||||
self->deferrable = STATE_DEFAULT;
|
||||
|
|
|
@ -465,3 +465,19 @@ psyco_GetDecimalType(void)
|
|||
|
||||
return decimalType;
|
||||
}
|
||||
|
||||
|
||||
/* Transfer ownership of an object to another object's state.
|
||||
*
|
||||
* Work around what seems a bug to the cpychecker which doesn't recognise
|
||||
* the new reference: tell it one reference is just gone.
|
||||
*
|
||||
* See davidmalcolm/gcc-python-plugin#109
|
||||
*/
|
||||
#ifdef WITH_CPYCHECKER_RETURNS_BORROWED_REF_ATTRIBUTE
|
||||
STEALS(1) IGNORE_REFCOUNT BORROWED PyObject *
|
||||
TO_STATE(PyObject* obj)
|
||||
{
|
||||
return obj;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -58,4 +58,10 @@ HIDDEN RAISES BORROWED PyObject *psyco_set_error(
|
|||
|
||||
HIDDEN PyObject *psyco_GetDecimalType(void);
|
||||
|
||||
#ifdef WITH_CPYCHECKER_RETURNS_BORROWED_REF_ATTRIBUTE
|
||||
HIDDEN STEALS(1) IGNORE_REFCOUNT BORROWED PyObject *TO_STATE(PyObject* obj);
|
||||
#else
|
||||
#define TO_STATE(x) x
|
||||
#endif
|
||||
|
||||
#endif /* !defined(UTILS_H) */
|
||||
|
|
Loading…
Reference in New Issue
Block a user