python activities startup

Tomeu Vizoso tomeu at tomeuvizoso.net
Fri Feb 8 08:44:24 EST 2008


On Fri, 2008-02-08 at 13:41 +0100, Tomeu Vizoso wrote:
> On Thu, 2008-02-07 at 16:46 +0000, Simon McVittie wrote:
> > A better solution would be for Rainbow to avoid SessionBus() entirely,
> > and instead use an instance of the superclass, dbus.bus.BusConnection. This
> > does not have the weird caching behaviour at all (one call to the
> > constructor = one instance = one D-Bus connection). The code that gets run
> > after forking is still free to use the shared SessionBus.
> 
> Rainbow is not using the session bus at all, just the system one.
> 
> But when the child tries to instantiate a SessionBus object, I get this stack trace:
> 
> /usr/lib/python2.5/site-packages/sugar/presence/presenceservice.py in __init__(self=<PresenceService object at 0x86afbbc (sugar+presence+presenceservice+PresenceService at 0x86f1370)>, allow_offline_iface=False)
>      73 
>      74         # Get a connection to the session bus
> ---> 75         self._bus = dbus.SessionBus()
>         self._bus = undefined
>         global dbus.SessionBus = <class 'dbus._dbus.SessionBus'>
>      76         self._bus.add_signal_receiver(self._name_owner_changed_cb,
>      77                                     signal_name="NameOwnerChanged",
> 
> /usr/lib/python2.5/site-packages/dbus/_dbus.py in __new__(cls=<class 'dbus._dbus.SessionBus'>, private=False, mainloop=None)
>     211         """
>     212         return Bus.__new__(cls, Bus.TYPE_SESSION, private=private,
> --> 213                            mainloop=mainloop)
>         mainloop = None
>     214 
>     215 class StarterBus(Bus):
> 
> /usr/lib/python2.5/site-packages/dbus/_dbus.py in __new__(cls=<class 'dbus._dbus.SessionBus'>, bus_type=0, private=False, mainloop=None)
>     100             raise ValueError('invalid bus_type %s' % bus_type)
>     101 
> --> 102         bus = BusConnection.__new__(subclass, bus_type, mainloop=mainloop)
>         bus = undefined
>         global BusConnection.__new__ = <function __new__ at 0x822733c>
>         subclass = <class 'dbus._dbus.SessionBus'>
>         bus_type = 0
>         mainloop = None
>     103 
>     104         bus._bus_type = bus_type
> 
> /usr/lib/python2.5/site-packages/dbus/bus.py in __new__(cls=<class 'dbus._dbus.SessionBus'>, address_or_type=0, mainloop=None)
>     123 
>     124     def __new__(cls, address_or_type=TYPE_SESSION, mainloop=None):
> --> 125         bus = cls._new_for_bus(address_or_type, mainloop=mainloop)
>         bus = undefined
>         cls._new_for_bus = <built-in method _new_for_bus of type object at 0x8256f44>
>         address_or_type = 0
>         mainloop = None
>     126 
>     127         # _bus_names is used by dbus.service.BusName!
> 
> <class 'dbus.exceptions.DBusException'>: org.freedesktop.DBus.Error.NoServer: Failed to connect to socket /tmp/dbus-7dk02BRXOZ: Connection refused
> 
> 
> This is the value of the DBUS_SESSION_BUS_ADDRESS env var:
> unix:path=/tmp/olpc-session-bus,guid=fdf37ebd35a585d12382a50047ac3034
> 
> unix:path=/tmp/olpc-session-bus is specified
> in /etc/dbus-1/session-olpc.conf:
> 
> <busconfig>
>   <!-- Our well-known bus type, don't change this -->
>   <type>session</type>
> 
>   <listen>unix:path=/tmp/olpc-session-bus</listen>
> 
>   <standard_session_servicedirs />
> ...

When running inside rainbow, strace shows this:

[pid  2370] connect(0, {sa_family=AF_FILE, path=@/tmp/dbus-XQcfxlvcoY}, 23) = -1 ECONNREFUSED (Connection refused)

But on the console (works fine):

connect(3, {sa_family=AF_FILE, path="/tmp/olpc-session-bus"}, 23) = 0

Tomeu



More information about the Devel mailing list