From: John (J5) Palmieri Date: Tue, 30 Aug 2005 15:21:04 +0000 (+0000) Subject: * python/dbus_bindings.pyx (_pending_call_notification): Obtain the X-Git-Tag: dbus-0.50~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=46a1e648fe1c86dc33df799fddf97659ddc17063;p=thirdparty%2Fdbus.git * python/dbus_bindings.pyx (_pending_call_notification): Obtain the GIL global lock when calling back into Python --- diff --git a/ChangeLog b/ChangeLog index 0bb0c24b9..c36be7ee6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2005-08-30 John (J5) Palmieri + + * python/dbus_bindings.pyx (_pending_call_notification): Obtain the + GIL global lock when calling back into Python + 2005-08-29 John (J5) Palmieri * Release 0.36.2 diff --git a/python/dbus_bindings.pyx b/python/dbus_bindings.pyx index ee3e648dd..6973944af 100644 --- a/python/dbus_bindings.pyx +++ b/python/dbus_bindings.pyx @@ -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) = 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)