diff options
| author | John (J5) Palmieri <johnp@redhat.com> | 2005-08-30 15:21:04 +0000 | 
|---|---|---|
| committer | John (J5) Palmieri <johnp@redhat.com> | 2005-08-30 15:21:04 +0000 | 
| commit | 46a1e648fe1c86dc33df799fddf97659ddc17063 (patch) | |
| tree | 4251ed0235a765c7bbd0a042067cc8d1e0524d90 /python | |
| parent | b701a78aca32394ff18a630f029cc75dbd34bc9e (diff) | |
* python/dbus_bindings.pyx (_pending_call_notification): Obtain the
  GIL global lock when calling back into Python
Diffstat (limited to 'python')
| -rw-r--r-- | python/dbus_bindings.pyx | 25 | 
1 files changed, 15 insertions, 10 deletions
diff --git a/python/dbus_bindings.pyx b/python/dbus_bindings.pyx index ee3e648d..6973944a 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) = <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)  | 
