--- /dev/null
+diff -ur dbus-glib-0.78/dbus/dbus-gproxy.c patched/dbus-glib-0.78/dbus/dbus-gproxy.c
+--- dbus-glib-0.78/dbus/dbus-gproxy.c 2008-11-17 19:45:50.000000000 +0100
++++ patched/dbus-glib-0.78/dbus/dbus-gproxy.c 2009-01-30 18:12:51.000000000 +0100
+@@ -2175,6 +2175,41 @@
+ return NULL;
+ }
+
++struct dbus_g_proxy_begin_call_internal_helper_args
++{
++ DBusGProxy *proxy;
++ DBusGProxyCallNotify notify;
++ guint call_id;
++ gpointer user_data;
++ GDestroyNotify destroy;
++};
++
++static void
++dbus_g_proxy_begin_call_internal_helper (DBusPendingCall *pending, void *user_data)
++{
++ struct dbus_g_proxy_begin_call_internal_helper_args *t1 = user_data;
++ DBusGProxyPrivate *priv = DBUS_G_PROXY_GET_PRIVATE(t1->proxy);
++ GPendingNotifyClosure *closure;
++
++
++ t1->call_id = ++priv->call_id_counter;
++
++ if (t1->notify != NULL)
++ {
++ closure = g_new (GPendingNotifyClosure, 1);
++ closure->proxy = t1->proxy; /* No need to ref as the lifecycle is tied to proxy */
++ closure->call_id = t1->call_id;
++ closure->func = t1->notify;
++ closure->data = t1->user_data;
++ closure->free_data_func = t1->destroy;
++ dbus_pending_call_set_notify (pending, d_pending_call_notify,
++ closure,
++ d_pending_call_free);
++ }
++
++ g_hash_table_insert (priv->pending_calls, GUINT_TO_POINTER (t1->call_id), pending);
++}
++
+ static guint
+ dbus_g_proxy_begin_call_internal (DBusGProxy *proxy,
+ const char *method,
+@@ -2182,52 +2217,42 @@
+ gpointer user_data,
+ GDestroyNotify destroy,
+ GValueArray *args,
+- int timeout)
++ int timeout)
+ {
++ struct dbus_g_proxy_begin_call_internal_helper_args t1;
++
+ DBusMessage *message;
+ DBusPendingCall *pending;
+- GPendingNotifyClosure *closure;
+- guint call_id;
+ DBusGProxyPrivate *priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
+
++ t1.proxy = proxy;
++ t1.notify = notify;
++ t1.user_data = user_data;
++ t1.destroy = destroy;
++
+ pending = NULL;
+
+ message = dbus_g_proxy_marshal_args_to_message (proxy, method, args);
+ if (!message)
+ goto oom;
+
+- if (!dbus_connection_send_with_reply (priv->manager->connection,
+- message,
+- &pending,
+- timeout))
++ if (!dbus_connection_send_with_reply_setup (priv->manager->connection,
++ message,
++ &pending,
++ dbus_g_proxy_begin_call_internal_helper,
++ &t1,
++ timeout))
+ goto oom;
+ dbus_message_unref (message);
+-
++
+ /* If we got a NULL pending, that means the connection was disconnected,
+- * and we need to abort this call.
++ * and we need to abort this call.
+ * https://bugs.freedesktop.org/show_bug.cgi?id=12675
+ */
+ if (pending == NULL)
+ return 0;
+
+- call_id = ++priv->call_id_counter;
+-
+- if (notify != NULL)
+- {
+- closure = g_new (GPendingNotifyClosure, 1);
+- closure->proxy = proxy; /* No need to ref as the lifecycle is tied to proxy */
+- closure->call_id = call_id;
+- closure->func = notify;
+- closure->data = user_data;
+- closure->free_data_func = destroy;
+- dbus_pending_call_set_notify (pending, d_pending_call_notify,
+- closure,
+- d_pending_call_free);
+- }
+-
+- g_hash_table_insert (priv->pending_calls, GUINT_TO_POINTER (call_id), pending);
+-
+- return call_id;
++ return t1.call_id;
+ oom:
+ g_error ("Out of memory");
+ return 0;
--- /dev/null
+DESCRIPTION = "GLib bindings for the dbus message bus system"
+HOMEPAGE = "http://www.freedesktop.org/Software/dbus"
+SECTION = "libs"
+LICENSE = "GPL"
+DEPENDS = "expat glib-2.0 virtual/libintl dbus-glib-native dbus"
+INC_PR = "r0"
+
+SRC_URI = "\
+ http://dbus.freedesktop.org/releases/dbus-glib/dbus-glib-${PV}.tar.gz \
+ file://no-introspect.patch;patch=1 \
+ file://no-examples.patch;patch=1 \
+"
+
+inherit autotools pkgconfig gettext
+
+do_configure_prepend() {
+ install -m 0644 ${STAGING_DATADIR_NATIVE}/dbus/dbus-bus-introspect.xml ${S}/tools/
+ install -m 0644 ${STAGING_DATADIR_NATIVE}/dbus/dbus-glib-bindings.h ${S}/tools/
+}
+
+do_stage() {
+ oe_libinstall -so -C dbus libdbus-glib-1 ${STAGING_LIBDIR}
+ autotools_stage_includes
+}
+
+PACKAGES += "${PN}-bash-completion"
+FILES_${PN}-bash-completion = "\
+ ${sysconfdir}/bash_completion.d \
+ ${prefix}/libexec/dbus-bash-completion-helper \
+"
+FILES_${PN} = "${libdir}/lib*.so.*"
+FILES_${PN}-dev += "\
+ ${libdir}/dbus-1.0/include \
+ ${bindir}/dbus-glib-tool \
+ ${bindir}/dbus-binding-tool \
+"