1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
https://gitlab.freedesktop.org/dbus/dbus-python/-/work_items/59
https://src.fedoraproject.org/rpms/dbus-python/blob/rawhide/f/Revert-using-Py_TPFLAGS_MANAGED_WEAKREF.patch
From 32191526f73fa4ac6f760848c354b1353920755e Mon Sep 17 00:00:00 2001
From: Karolina Surma <ksurma@redhat.com>
Date: Wed, 14 Jan 2026 21:45:55 +0100
Subject: [PATCH] Revert using Py_TPFLAGS_MANAGED_WEAKREF
Added in https://gitlab.freedesktop.org/dbus/dbus-python/-/merge_requests/35
The feature is incomplete and doesn't work.
---
dbus_bindings/conn-internal.h | 2 --
dbus_bindings/conn.c | 11 -----------
dbus_bindings/server.c | 13 -------------
3 files changed, 26 deletions(-)
diff --git a/dbus_bindings/conn-internal.h b/dbus_bindings/conn-internal.h
index ae47816..d333d27 100644
--- a/dbus_bindings/conn-internal.h
+++ b/dbus_bindings/conn-internal.h
@@ -42,10 +42,8 @@ typedef struct {
*/
PyObject *object_paths;
-#if !DBUSPY_PY_VERSION_AT_LEAST(3, 12, 0, 0)
/* Weak-references list to make Connections weakly referenceable */
PyObject *weaklist;
-#endif
dbus_bool_t has_mainloop;
} Connection;
diff --git a/dbus_bindings/conn.c b/dbus_bindings/conn.c
index 54efc49..5dd4b5e 100644
--- a/dbus_bindings/conn.c
+++ b/dbus_bindings/conn.c
@@ -238,9 +238,7 @@ DBusPyConnection_NewConsumingDBusConnection(PyTypeObject *cls,
self->has_mainloop = (mainloop != Py_None);
self->conn = NULL;
self->filters = PyList_New(0);
-#if !DBUSPY_PY_VERSION_AT_LEAST(3, 12, 0, 0)
self->weaklist = NULL;
-#endif
if (!self->filters) goto err;
self->object_paths = PyDict_New();
if (!self->object_paths) goto err;
@@ -394,9 +392,7 @@ static void Connection_tp_dealloc(Connection *self)
/* avoid clobbering any pending exception */
PyErr_Fetch(&et, &ev, &etb);
-#if !DBUSPY_PY_VERSION_AT_LEAST(3, 12, 0, 0)
if (self->weaklist)
-#endif
{
PyObject_ClearWeakRefs((PyObject *)self);
}
@@ -460,19 +456,12 @@ PyTypeObject DBusPyConnection_Type = {
0, /*tp_getattro*/
0, /*tp_setattro*/
0, /*tp_as_buffer*/
-#if DBUSPY_PY_VERSION_AT_LEAST(3, 12, 0, 0)
- Py_TPFLAGS_MANAGED_WEAKREF |
-#endif
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
Connection_tp_doc, /*tp_doc*/
0, /*tp_traverse*/
0, /*tp_clear*/
0, /*tp_richcompare*/
-#if DBUSPY_PY_VERSION_AT_LEAST(3, 12, 0, 0)
- 0, /*tp_weaklistoffset*/
-#else
offsetof(Connection, weaklist), /*tp_weaklistoffset*/
-#endif
0, /*tp_iter*/
0, /*tp_iternext*/
DBusPyConnection_tp_methods, /*tp_methods*/
diff --git a/dbus_bindings/server.c b/dbus_bindings/server.c
index d250a1d..9382fe6 100644
--- a/dbus_bindings/server.c
+++ b/dbus_bindings/server.c
@@ -38,10 +38,8 @@ typedef struct {
/* The Connection subtype for which this Server is a factory */
PyObject *conn_class;
-#if !DBUSPY_PY_VERSION_AT_LEAST(3, 12, 0, 0)
/* Weak-references list to make server weakly referenceable */
PyObject *weaklist;
-#endif
PyObject *mainloop;
} Server;
@@ -425,9 +423,7 @@ Server_tp_new(PyTypeObject *cls, PyObject *args, PyObject *kwargs)
return NULL;
}
-#if !DBUSPY_PY_VERSION_AT_LEAST(3, 12, 0, 0)
((Server *)self)->weaklist = NULL;
-#endif
TRACE(self);
return self;
@@ -442,9 +438,7 @@ static void Server_tp_dealloc(Server *self)
/* avoid clobbering any pending exception */
PyErr_Fetch(&et, &ev, &etb);
-#if !DBUSPY_PY_VERSION_AT_LEAST(3, 12, 0, 0)
if (self->weaklist)
-#endif
{
PyObject_ClearWeakRefs((PyObject *)self);
}
@@ -577,19 +571,12 @@ PyTypeObject DBusPyServer_Type = {
0, /*tp_getattro*/
0, /*tp_setattro*/
0, /*tp_as_buffer*/
-#if DBUSPY_PY_VERSION_AT_LEAST(3, 12, 0, 0)
- Py_TPFLAGS_MANAGED_WEAKREF |
-#endif
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
Server_tp_doc, /*tp_doc*/
0, /*tp_traverse*/
0, /*tp_clear*/
0, /*tp_richcompare*/
-#if DBUSPY_PY_VERSION_AT_LEAST(3, 12, 0, 0)
- 0, /*tp_weaklistoffset*/
-#else
offsetof(Server, weaklist), /*tp_weaklistoffset*/
-#endif
0, /*tp_iter*/
0, /*tp_iternext*/
DBusPyServer_tp_methods,/*tp_methods*/
--
2.52.0
|