GVariant *params,
gpointer userdata)
{
- int handle;
+ gint handle = -1;
+ gboolean stopped_by_user = FALSE;
struct dbus_cb_data *dbus_data = (struct dbus_cb_data *)userdata;
- g_variant_get(params, "(i)", &handle);
-
if (!dbus_data) {
- LOGE("dbus data is null. handle(%d)", handle);
+ LOGE("dbus data is null");
return;
}
- if (handle == dbus_data->handle) {
- g_dbus_connection_signal_unsubscribe(dbus_data->conn, dbus_data->subs_id);
- g_object_unref(dbus_data->conn);
+ g_variant_get(params, "(ib)", &handle, &stopped_by_user);
+ LOGI("expected handle(%d) callback(%p), incoming handle(%d), stopped_by_user(%d)",
+ dbus_data->handle, dbus_data->cb, handle, stopped_by_user);
+
+ if (handle != dbus_data->handle)
+ return;
+
+ g_dbus_connection_signal_unsubscribe(dbus_data->conn, dbus_data->subs_id);
+ g_object_unref(dbus_data->conn);
- LOGD("user callback for handle(%d) cb(%p)", handle, dbus_data->cb);
+ if (!stopped_by_user) {
+ LOGI("Invoking user callback for handle(%d) cb(%p)", handle, dbus_data->cb);
dbus_data->cb(handle, dbus_data->user_data);
- g_free(dbus_data);
}
+
+ g_free(dbus_data);
}
int _wav_play_sound(const char *path, sound_stream_info_h stream_info, unsigned loop_count,