DBusGMethodInvocation is null on i386, works on x86_64

Braden McDaniel braden at endoframe.com
Thu Oct 23 23:56:16 PDT 2008


I'm observing a situation where the DBusGMethodInvocation pointer passed
to the implementation of a remote call is null on i386; but the same
code works as expected on x86_64.

I have the following XML:

        <node name="/org/openvrml/BrowserFactory">
          <interface name="org.openvrml.BrowserFactory">
            <method name="CreateControl">
              <annotation name="org.freedesktop.DBus.GLib.Async" value="true" />
              <arg type="s" name="host_name" direction="in" />
              <arg type="o" name="host_object_path" direction="in" />
              <arg type="t" name="host_id" direction="in" />
              <arg type="b" name="expect_initial_stream" direction="in" />
              <arg type="o" direction="out">
                <annotation name="org.freedesktop.DBus.GLib.ReturnVal" value=""/>
              </arg>
            </method>
          </interface>
        </node>
        
This is implemented like so:

        gboolean
        openvrml_xembed_browser_factory_create_control(
            OpenvrmlXembedBrowserFactory * control_factory,
            const char * host_name,
            const char * host_obj_path,
            guint host_id,
            gboolean expect_initial_stream,
            DBusGMethodInvocation * context)
        {
            ...
            char * sender = dbus_g_method_get_sender(context);
            ...
        }

On x86_64, this seems to work just fine.  But on i386, context is null
and the call to dbus_g_method_get_sender results in a segfault.

I'm using D-Bus 1.2.4.

-- 
Braden McDaniel                           e-mail: <braden at endoframe.com>
<http://endoframe.com>                    Jabber: <braden at jabber.org>




More information about the dbus mailing list