summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <smcv@debian.org>2010-12-02 17:27:34 +0000
committerSimon McVittie <smcv@debian.org>2010-12-02 17:27:34 +0000
commitd3f57baf2a9e5e26e2365313abd2890239b6572a (patch)
treeaf069da129d5b0d17f9dcb294cedc8bd1a607002
parent56ad64cd14e52b479489549f76343f19e3842139 (diff)
downloaddbus-python-d3f57baf2a9e5e26e2365313abd2890239b6572a.tar.gz
fd.o #23831: make sure to ref types passed to PyModule_AddObject
This avoids these static types wrongly being deallocated. Python implements static types as having one initial reference, which is never meant to be released, but if you get your refcounting wrong they'll be "deallocated" (causing a crash) during Py_Finalize.
-rw-r--r--_dbus_bindings/abstract.c1
-rw-r--r--_dbus_bindings/bytes.c1
-rw-r--r--_dbus_bindings/conn.c2
-rw-r--r--_dbus_bindings/containers.c1
-rw-r--r--_dbus_bindings/float.c1
-rw-r--r--_dbus_bindings/int.c1
-rw-r--r--_dbus_bindings/libdbusconn.c3
-rw-r--r--_dbus_bindings/mainloop.c2
-rw-r--r--_dbus_bindings/message.c7
-rw-r--r--_dbus_bindings/pending-call.c2
-rw-r--r--_dbus_bindings/server.c2
-rw-r--r--_dbus_bindings/signature.c1
-rw-r--r--_dbus_bindings/string.c1
13 files changed, 25 insertions, 0 deletions
diff --git a/_dbus_bindings/abstract.c b/_dbus_bindings/abstract.c
index 303cb57..30def6e 100644
--- a/_dbus_bindings/abstract.c
+++ b/_dbus_bindings/abstract.c
@@ -647,6 +647,7 @@ dbus_py_init_abstract(void)
dbus_bool_t
dbus_py_insert_abstract_types(PyObject *this_module)
{
+ /* PyModule_AddObject steals a ref */
Py_INCREF(&DBusPyIntBase_Type);
Py_INCREF(&DBusPyLongBase_Type);
Py_INCREF(&DBusPyStrBase_Type);
diff --git a/_dbus_bindings/bytes.c b/_dbus_bindings/bytes.c
index bc12a14..5c76ec2 100644
--- a/_dbus_bindings/bytes.c
+++ b/_dbus_bindings/bytes.c
@@ -252,6 +252,7 @@ dbus_py_init_byte_types(void)
dbus_bool_t
dbus_py_insert_byte_types(PyObject *this_module)
{
+ /* PyModule_AddObject steals a ref */
Py_INCREF(&DBusPyByte_Type);
if (PyModule_AddObject(this_module, "Byte",
(PyObject *)&DBusPyByte_Type) < 0) return 0;
diff --git a/_dbus_bindings/conn.c b/_dbus_bindings/conn.c
index 36e8dc8..c90edf7 100644
--- a/_dbus_bindings/conn.c
+++ b/_dbus_bindings/conn.c
@@ -463,6 +463,8 @@ dbus_py_init_conn_types(void)
dbus_bool_t
dbus_py_insert_conn_types(PyObject *this_module)
{
+ /* PyModule_AddObject steals a ref */
+ Py_INCREF (&DBusPyConnection_Type);
if (PyModule_AddObject(this_module, "Connection",
(PyObject *)&DBusPyConnection_Type) < 0) return FALSE;
return TRUE;
diff --git a/_dbus_bindings/containers.c b/_dbus_bindings/containers.c
index 0fb9e4b..0ccebb1 100644
--- a/_dbus_bindings/containers.c
+++ b/_dbus_bindings/containers.c
@@ -748,6 +748,7 @@ dbus_py_init_container_types(void)
dbus_bool_t
dbus_py_insert_container_types(PyObject *this_module)
{
+ /* PyModule_AddObject steals a ref */
Py_INCREF(&DBusPyArray_Type);
if (PyModule_AddObject(this_module, "Array",
(PyObject *)&DBusPyArray_Type) < 0) return 0;
diff --git a/_dbus_bindings/float.c b/_dbus_bindings/float.c
index 5826ec3..734c4ab 100644
--- a/_dbus_bindings/float.c
+++ b/_dbus_bindings/float.c
@@ -145,6 +145,7 @@ dbus_py_init_float_types(void)
dbus_bool_t
dbus_py_insert_float_types(PyObject *this_module)
{
+ /* PyModule_AddObject steals a ref */
Py_INCREF(&DBusPyDouble_Type);
if (PyModule_AddObject(this_module, "Double",
(PyObject *)&DBusPyDouble_Type) < 0) return 0;
diff --git a/_dbus_bindings/int.c b/_dbus_bindings/int.c
index a1ee697..f49d50a 100644
--- a/_dbus_bindings/int.c
+++ b/_dbus_bindings/int.c
@@ -751,6 +751,7 @@ dbus_py_init_int_types(void)
dbus_bool_t
dbus_py_insert_int_types(PyObject *this_module)
{
+ /* PyModule_AddObject steals a ref */
Py_INCREF(&DBusPyInt16_Type);
Py_INCREF(&DBusPyUInt16_Type);
Py_INCREF(&DBusPyInt32_Type);
diff --git a/_dbus_bindings/libdbusconn.c b/_dbus_bindings/libdbusconn.c
index 9bd8def..0c87078 100644
--- a/_dbus_bindings/libdbusconn.c
+++ b/_dbus_bindings/libdbusconn.c
@@ -114,6 +114,9 @@ dbus_py_init_libdbus_conn_types(void)
dbus_bool_t
dbus_py_insert_libdbus_conn_types(PyObject *this_module)
{
+ /* PyModule_AddObject steals a ref */
+ Py_INCREF (&DBusPyLibDBusConnection_Type);
+
if (PyModule_AddObject(this_module, "_LibDBusConnection",
(PyObject *)&DBusPyLibDBusConnection_Type) < 0)
return FALSE;
diff --git a/_dbus_bindings/mainloop.c b/_dbus_bindings/mainloop.c
index 1733410..710f474 100644
--- a/_dbus_bindings/mainloop.c
+++ b/_dbus_bindings/mainloop.c
@@ -198,6 +198,8 @@ dbus_py_insert_mainloop_types(PyObject *this_module)
NULL);
if (!null_main_loop) return 0;
+ /* PyModule_AddObject steals a ref */
+ Py_INCREF (&NativeMainLoop_Type);
if (PyModule_AddObject (this_module, "NativeMainLoop",
(PyObject *)&NativeMainLoop_Type) < 0) return 0;
if (PyModule_AddObject (this_module, "NULL_MAIN_LOOP",
diff --git a/_dbus_bindings/message.c b/_dbus_bindings/message.c
index af74d95..5aed54d 100644
--- a/_dbus_bindings/message.c
+++ b/_dbus_bindings/message.c
@@ -1040,6 +1040,13 @@ dbus_py_init_message_types(void)
dbus_bool_t
dbus_py_insert_message_types(PyObject *this_module)
{
+ /* PyModule_AddObject steals a ref */
+ Py_INCREF (&MessageType);
+ Py_INCREF (&MethodCallMessageType);
+ Py_INCREF (&MethodReturnMessageType);
+ Py_INCREF (&ErrorMessageType);
+ Py_INCREF (&SignalMessageType);
+
if (PyModule_AddObject(this_module, "Message",
(PyObject *)&MessageType) < 0) return 0;
diff --git a/_dbus_bindings/pending-call.c b/_dbus_bindings/pending-call.c
index 6970f22..aac2af8 100644
--- a/_dbus_bindings/pending-call.c
+++ b/_dbus_bindings/pending-call.c
@@ -285,6 +285,8 @@ dbus_py_init_pending_call (void)
dbus_bool_t
dbus_py_insert_pending_call (PyObject *this_module)
{
+ /* PyModule_AddObject steals a ref */
+ Py_INCREF (&PendingCallType);
if (PyModule_AddObject (this_module, "PendingCall",
(PyObject *)&PendingCallType) < 0) return 0;
return 1;
diff --git a/_dbus_bindings/server.c b/_dbus_bindings/server.c
index 14d41de..a575fc0 100644
--- a/_dbus_bindings/server.c
+++ b/_dbus_bindings/server.c
@@ -572,6 +572,8 @@ dbus_py_init_server_types(void)
dbus_bool_t
dbus_py_insert_server_types(PyObject *this_module)
{
+ /* PyModule_AddObject steals a ref */
+ Py_INCREF (&DBusPyServer_Type);
if (PyModule_AddObject(this_module, "_Server",
(PyObject *)&DBusPyServer_Type) < 0) return FALSE;
diff --git a/_dbus_bindings/signature.c b/_dbus_bindings/signature.c
index b15261c..28fa7a1 100644
--- a/_dbus_bindings/signature.c
+++ b/_dbus_bindings/signature.c
@@ -232,6 +232,7 @@ dbus_py_init_signature(void)
dbus_bool_t
dbus_py_insert_signature(PyObject *this_module)
{
+ /* PyModule_AddObject steals a ref */
Py_INCREF(&DBusPySignature_Type);
if (PyModule_AddObject(this_module, "Signature",
(PyObject *)&DBusPySignature_Type) < 0) return 0;
diff --git a/_dbus_bindings/string.c b/_dbus_bindings/string.c
index d68af4e..03f966c 100644
--- a/_dbus_bindings/string.c
+++ b/_dbus_bindings/string.c
@@ -364,6 +364,7 @@ dbus_py_init_string_types(void)
dbus_bool_t
dbus_py_insert_string_types(PyObject *this_module)
{
+ /* PyModule_AddObject steals a ref */
Py_INCREF(&DBusPyObjectPath_Type);
Py_INCREF(&DBusPyUTF8String_Type);
Py_INCREF(&DBusPyString_Type);