#define MAX_WAIT_COUNT 100
#define DEFAULT_REQ_ID "DEF_REQ_ID"
-static void _mc_ipc_signal_unsubscribe(GDBusConnection *connection, guint handler);
+typedef struct {
+ GDBusConnection *dbus_conn;
+ mc_signal_received_cb callback;
+ char *user_data;
+ guint handler;
+ char *key;
+} mc_ipc_listener_s;
/* This checks if service daemon is running */
static int __make_service_connection(mc_priv_type_e priv_type)
static void __mc_destroy_listener(gpointer data)
{
mc_ipc_listener_s *listener = (mc_ipc_listener_s *)data;
- if (listener) {
- mc_debug("listener[%s] will be unregistered.", listener->key);
- _mc_ipc_signal_unsubscribe(listener->dbus_conn, listener->handler);
- MC_SAFE_G_FREE(listener->key);
- MC_SAFE_FREE(listener);
- }
+ if (!listener)
+ return;
+ mc_debug("listener[%s] will be unregistered.", listener->key);
+ g_dbus_connection_signal_unsubscribe(listener->dbus_conn, listener->handler);
+ MC_SAFE_G_FREE(listener->key);
+ MC_SAFE_FREE(listener);
}
static gboolean _mc_ipc_is_listener_duplicated(GList *listener_list, const char *key)
return FALSE;
}
-static guint _mc_ipc_signal_subscribe(GDBusConnection *connection, const char *interface_name, const char *signal_name, void *user_data)
-{
- guint ret = g_dbus_connection_signal_subscribe(
- connection,
- NULL,
- interface_name,
- signal_name,
- MC_DBUS_PATH,
- NULL,
- G_DBUS_SIGNAL_FLAGS_NONE,
- __mc_ipc_signal_cb,
- user_data,
- NULL);
-
- return ret;
-}
-
-static void _mc_ipc_signal_unsubscribe(GDBusConnection *connection, guint handler)
-{
- mc_retm_if(connection == NULL, "invalid connection");
- mc_retm_if(handler == 0, "invalid handler");
-
- g_dbus_connection_signal_unsubscribe(connection, handler);
-}
-
int _mc_ipc_get_dbus_connection(GDBusConnection **connection, int *dref_count)
{
GError *error = NULL;
return MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER;
}
- mc_ipc_listener_s *listener = (mc_ipc_listener_s *)g_malloc(sizeof(mc_ipc_listener_s));
+ mc_ipc_listener_s *listener = (mc_ipc_listener_s *)calloc(1, sizeof(__dbus_listener_s));
if (listener == NULL) {
mc_error("Error memroy allocation");
MC_SAFE_G_FREE(key);
return MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY;
}
- listener->handler = _mc_ipc_signal_subscribe(connection, interface_name, signal_name, listener_list);
+ listener->dbus_conn = connection;
+ listener->callback = callback;
+ listener->user_data = user_data;
+ listener->key = key;
+ listener->handler = g_dbus_connection_signal_subscribe(
+ connection,
+ NULL,
+ interface_name,
+ signal_name,
+ MC_DBUS_PATH,
+ NULL,
+ G_DBUS_SIGNAL_FLAGS_NONE,
+ (GDBusSignalCallback)__mc_ipc_signal_cb,
+ (gpointer)listener_list,
+ NULL);
+
if (listener->handler == 0) {
mc_error("Error signal subscribe");
MC_SAFE_G_FREE(key);
- MC_SAFE_G_FREE(listener);
+ MC_SAFE_FREE(listener);
return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
}
- listener->dbus_conn = connection;
- listener->callback = callback;
- listener->user_data = user_data;
- listener->key = key;
-
(*listener_list) = g_list_append(*listener_list, listener);
mc_debug("listener[%s] is registered. listener_cnt[%d]", key, g_list_length(*listener_list));