Ticket #251 (closed defect: fixed)
ogpsd's Start fails with: Known resources are []
| Reported by: | Sascha | Owned by: | daniel |
|---|---|---|---|
| Priority: | minor | Milestone: | |
| Component: | framework/ogpsd | Version: | milestone4 |
| Keywords: | Cc: |
Description
...because ogpsd starts before ousaged:
* NameOwnerChanged: org.freesmartphone.ogpsd Start() returns error: Known resources are [] * NameOwnerChanged: org.freesmartphone.ousaged Start() returns no error, but gps device is not powered on
Change History
comment:3 Changed 4 years ago by Sascha
The Start and Stop methods of the GPSDevice class need to handle ousaged's errors properly.
The following patch works for my concrete example:
diff --git a/framework/subsystems/ogpsd/gpsdevice.py b/framework/subsystems/ogpsd/gpsdevice.py
index d4ff1f6..05e7e3a 100644
--- a/framework/subsystems/ogpsd/gpsdevice.py
+++ b/framework/subsystems/ogpsd/gpsdevice.py
@@ -215,7 +215,10 @@ class GPSDevice( resource.Resource ):
if not self.usageiface:
usage = self.bus.get_object( "org.freesmartphone.ousaged", "/org/freesmartphone/Usage", follow_name_owner_changes=True )
self.usageiface = dbus.Interface( usage, "org.freesmartphone.Usage" )
- self.usageiface.RequestResource("GPS", reply_handler=dbus_ok, error_handler=dbus_error )
+ def on_error( error ):
+ self._users.remove( sender )
+ dbus_error( dbus.DBusException("RequestResource failed") )
+ self.usageiface.RequestResource("GPS", reply_handler=dbus_ok, error_handler=on_error)
else:
dbus_ok()
else:
This still requires that all Start and Stop calls/replies/errors are in the expected order, which is not always the case!
A proper fix would be to serialize all Start and Stop calls/replies/errors.
comment:5 Changed 4 years ago by daniel
- Milestone milestone5.5 deleted
This needs some more thinking about how to handle resource appearance properly.
Note: See
TracTickets for help on using
tickets.
