From: dorphell <dor...@gm...> - 2009-08-19 15:01:30
|
Hello all, I'm having problems getting a dbus-c++ based app, Youki Media Player, to run properly -- and I was hoping someone here would have some ideas of what could be wrong. Specifically, the problem is that the app won't register Introspectable for some reason, when it absolutely should and does on the developer's system (Milosz) with the same exact version of the app and dbus-c++ (we both compiled from the same source package). With the 'echo' example in the dbus-c++ source tree, it works: ---------------- $ export DBUSXX_VERBOSE=1 $ ./echo-server dbus-c++: registering stubs for connection 0xf1ec40 dbus-c++: added watch 0xf207e0 (off) fd=3 flags=2 dbus-c++: added watch 0xf20870 (on) fd=3 flags=1 dbus-c++: :1.31: registering bus name org.freedesktop.DBus.Examples.Echo dbus-c++: added timeout 0xf1f1f0 (on) interval=25000 dbus-c++: removed timeout 0xf1f1f0 dbus-c++: added timeout 0xf1eff0 (on) interval=25000 dbus-c++: removed timeout 0xf1eff0 dbus-c++: :1.31: added match rule destination='org.freedesktop.DBus.Examples.Echo' dbus-c++: adding interface org.freedesktop.DBus.EchoDemo dbus-c++: adding interface org.freedesktop.DBus.Introspectable dbus-c++: Introspectable dbus-c++: registering local object /org/freedesktop/DBus/Examples/Echo dbus-c++: entering dispatcher 0x616bc0 dbus-c++: dispatching on 0xf1ec40 dbus-c++: dispatching on 0xf1ec40 dbus-c++: all dispatching done on 0xf1ec40 ---------------- But when I run the app, for some reason I can't get the Introspectable even though it's in the app code and Milosz is certain there is no problem in Youki's code. I mean... it "just works" for him and the point at which it fails seems too trivial, it's such a basic fundamental constructor call, that we cannot find any way it can be wrong in the application itself... Almost like a hello-world program failing ;-) ---------------- $ /usr/libexec/youki-mlibman-bin ... ... [normal application startup output] ... dbus-c++: registering stubs for connection 0xb58a70 dbus-c++: glib: added watch 0xa21cf0 (off) fd=10 flags=2 dbus-c++: glib: added watch 0xa21d20 (on) fd=10 flags=1 dbus-c++: :1.42: registering bus name info.backtrace.Youki.MLibMan dbus-c++: glib: added timeout 0xa21c10 (on) dbus-c++: glib: removed timeout 0xa21c10 dbus-c++: glib: added timeout 0xa21c10 (on) dbus-c++: glib: removed timeout 0xa21c10 dbus-c++: :1.42: added match rule destination='info.backtrace.Youki.MLibMan' ... ... [more application startup output] ... dbus-c++: dispatching on 0xb58a70 dbus-c++: dispatching on 0xb58a70 dbus-c++: all dispatching done on 0xb58a70 ---------------- ==> No "adding interface org.freedesktop.DBus.Introspectable" We tried running it in gdb as well, trying to break out at the introspection.cpp line in the IntrospectableAdaptor constructor, but it didn't break out, as if it's not being called at all. And as you can see, the dbus session is created. I can see the active info.backtrace.Youki.MLibMan in dbus-browser, but I can't introspec it (i.e. the browser pane shows empty). And the app doesn't crash/exit. It keeps running (though the overall application can't function since the dbus communication with its GUI doesn't work) If you would like to take a look at where in Youki DBus::IntrospectableAdaptor is called, here it is: mlibmanager.hh ==> http://pastebin.ca/1534526 mlibmanager.cc ==> http://pastebin.ca/1534528 We debugged this for many hours trying to narrow it down but have run out of ideas. If anyone has any suggestions, I'm willing to try anything. Thanks in advance, dorphell |