Do callbacks in an idle handler so we don't dbus deadlock at any point
This commit is contained in:
parent
3ea146e17c
commit
ca60226fb0
@ -5,7 +5,7 @@ import dbus.service
|
|||||||
import dbus.glib
|
import dbus.glib
|
||||||
import pygtk
|
import pygtk
|
||||||
pygtk.require('2.0')
|
pygtk.require('2.0')
|
||||||
import gtk
|
import gtk, gobject
|
||||||
|
|
||||||
SHELL_SERVICE_NAME = "com.redhat.Sugar.Shell"
|
SHELL_SERVICE_NAME = "com.redhat.Sugar.Shell"
|
||||||
SHELL_SERVICE_PATH = "/com/redhat/Sugar/Shell"
|
SHELL_SERVICE_PATH = "/com/redhat/Sugar/Shell"
|
||||||
@ -57,9 +57,16 @@ class ActivityDbusService(dbus.service.Object):
|
|||||||
return
|
return
|
||||||
self._callbacks[name] = callback
|
self._callbacks[name] = callback
|
||||||
|
|
||||||
|
def _call_callback_cb(self, func, *args):
|
||||||
|
gobject.idle_add(func, *args)
|
||||||
|
return False
|
||||||
|
|
||||||
def _call_callback(self, name, *args):
|
def _call_callback(self, name, *args):
|
||||||
|
"""Call our activity object back, but from an idle handler
|
||||||
|
to minimize the possibility of stupid activities deadlocking
|
||||||
|
in dbus callbacks."""
|
||||||
if name in self._ALLOWED_CALLBACKS and self._callbacks[name]:
|
if name in self._ALLOWED_CALLBACKS and self._callbacks[name]:
|
||||||
self._callbacks[name](*args)
|
gobject.idle_add(self._call_callback_cb, self._callbacks[name], *args)
|
||||||
|
|
||||||
def connect_to_shell(self):
|
def connect_to_shell(self):
|
||||||
"""Register with the shell via dbus, getting an activity ID and
|
"""Register with the shell via dbus, getting an activity ID and
|
||||||
|
Loading…
Reference in New Issue
Block a user