diff options
Diffstat (limited to 'audio/manager.c')
| -rw-r--r-- | audio/manager.c | 34 | 
1 files changed, 20 insertions, 14 deletions
| diff --git a/audio/manager.c b/audio/manager.c index df0f550f..8c9fb7d9 100644 --- a/audio/manager.c +++ b/audio/manager.c @@ -940,6 +940,7 @@ static DBusHandlerResult am_create_headset(DBusConnection *conn, DBusMessage *ms  	DBusMessage *reply;  	DBusError derr;  	audio_device_t *device; +	gboolean created = FALSE;  	dbus_error_init(&derr);  	dbus_message_get_args(msg, &derr, @@ -954,15 +955,18 @@ static DBusHandlerResult am_create_headset(DBusConnection *conn, DBusMessage *ms  	str2ba(address, &bda);  	device = find_device(&bda); -	if (!device) { -		device = create_device(&bda); -		if (!add_device(device)) { -			free_device(device); -			return error_reply(connection, msg, -					"org.bluez.audio.Error.Failed", -					"Unable to create new audio device"); -		} -	} +        if (device) +            goto done; + +        device = create_device(&bda); +        if (!add_device(device)) { +            free_device(device); +            return error_reply(connection, msg, +                    "org.bluez.audio.Error.Failed", +                    "Unable to create new audio device"); +        } + +        created = TRUE;  	if (!device->headset) {  		device->headset = headset_init(device->object_path, NULL, 0); @@ -974,17 +978,19 @@ static DBusHandlerResult am_create_headset(DBusConnection *conn, DBusMessage *ms  		}  	} +done:  	path = device->object_path;  	reply = dbus_message_new_method_return(msg);  	if (!reply)  		return DBUS_HANDLER_RESULT_NEED_MEMORY; -	dbus_connection_emit_signal(connection, AUDIO_MANAGER_PATH, -					AUDIO_MANAGER_INTERFACE, -					"HeadsetCreated", -					DBUS_TYPE_STRING, &path, -					DBUS_TYPE_INVALID); +	if (created) +		dbus_connection_emit_signal(connection, AUDIO_MANAGER_PATH, +						AUDIO_MANAGER_INTERFACE, +						"HeadsetCreated", +						DBUS_TYPE_STRING, &path, +						DBUS_TYPE_INVALID);  	dbus_message_append_args(reply, DBUS_TYPE_STRING, &path,  					DBUS_TYPE_INVALID); | 
