diff options
| author | Marcel Holtmann <marcel@holtmann.org> | 2008-03-22 14:20:47 +0000 | 
|---|---|---|
| committer | Marcel Holtmann <marcel@holtmann.org> | 2008-03-22 14:20:47 +0000 | 
| commit | 41e3ea17c0017dd1b238adaf69d75433ebdc9810 (patch) | |
| tree | 53cc9718c568701520b4c0b030100d0edbada329 /common/dbus.c | |
| parent | 4445789f503e43d42737f88cf252d930eaa31780 (diff) | |
Make the external service register function asynchron
Diffstat (limited to 'common/dbus.c')
| -rw-r--r-- | common/dbus.c | 23 | 
1 files changed, 17 insertions, 6 deletions
diff --git a/common/dbus.c b/common/dbus.c index e4008810..aef88c7c 100644 --- a/common/dbus.c +++ b/common/dbus.c @@ -878,10 +878,22 @@ int set_nonblocking(int fd)  	return 0;  } +static void external_reply(DBusPendingCall *call, void *user_data) +{ +	DBusMessage *reply; + +	debug("Service register reply"); + +	reply = dbus_pending_call_steal_reply(call); + +	dbus_message_unref(reply); +} +  void register_external_service(DBusConnection *conn, const char *identifier,  				const char *name, const char *description)  { -	DBusMessage *msg, *reply; +	DBusMessage *msg; +	DBusPendingCall *call;  	info("Registering service"); @@ -896,14 +908,13 @@ void register_external_service(DBusConnection *conn, const char *identifier,  			DBUS_TYPE_STRING, &name,  			DBUS_TYPE_STRING, &description, DBUS_TYPE_INVALID); -	reply = dbus_connection_send_with_reply_and_block(conn, msg, -1, NULL); -	if (!reply) { +	if (dbus_connection_send_with_reply(conn, msg, &call, -1) == FALSE) {  		error("Can't register service"); +		dbus_message_unref(msg);  		return;  	} -	dbus_message_unref(msg); -	dbus_message_unref(reply); +	dbus_pending_call_set_notify(call, external_reply, NULL, NULL); -	dbus_connection_flush(conn); +	dbus_message_unref(msg);  }  | 
