* python/dbus_bindings.pyx (_pending_call_notification): Obtain the

GIL global lock when calling back into Python
This commit is contained in:
John (J5) Palmieri 2005-08-30 15:21:04 +00:00
parent b701a78aca
commit 46a1e648fe
2 changed files with 20 additions and 10 deletions

View file

@ -1,3 +1,8 @@
2005-08-30 John (J5) Palmieri <johnp@redhat.com>
* python/dbus_bindings.pyx (_pending_call_notification): Obtain the
GIL global lock when calling back into Python
2005-08-29 John (J5) Palmieri <johnp@redhat.com>
* Release 0.36.2

View file

@ -490,6 +490,7 @@ cdef class Connection:
cdef void _pending_call_notification(DBusPendingCall *pending_call, void *user_data):
cdef DBusMessage *dbus_message
cdef Message message
cdef PyGILState_STATE gil
(reply_handler, error_handler) = <object>user_data
@ -499,17 +500,21 @@ cdef void _pending_call_notification(DBusPendingCall *pending_call, void *user_d
type = message.get_type()
if type == MESSAGE_TYPE_METHOD_RETURN:
args = message.get_args_list()
reply_handler(*args)
elif type == MESSAGE_TYPE_ERROR:
args = message.get_args_list()
if len(args) > 0:
error_handler(DBusException(args[0]))
gil = PyGILState_Ensure()
try:
if type == MESSAGE_TYPE_METHOD_RETURN:
args = message.get_args_list()
reply_handler(*args)
elif type == MESSAGE_TYPE_ERROR:
args = message.get_args_list()
if len(args) > 0:
error_handler(DBusException(args[0]))
else:
error_handler(DBusException(""))
else:
error_handler(DBusException(""))
else:
error_handler(DBusException('Unexpected Message Type: ' + message.type_to_name(type)))
error_handler(DBusException('Unexpected Message Type: ' + message.type_to_name(type)))
finally:
PyGILState_Release(gil)
dbus_message_unref(dbus_message)
dbus_pending_call_unref(pending_call)