static int g_connection_cnt = -1;
static GList *g_connected_apps;
static GSource *g_source;
+static GMutex g_connected_apps_mutex;
typedef struct {
int client_sock;
static void __mc_clean_connected_apps(void)
{
+ g_mutex_lock(&g_connected_apps_mutex);
+
if (g_connected_apps) {
g_list_free_full(g_connected_apps, __mc_destroy_connected_apps);
g_connected_apps = NULL;
}
+
+ g_mutex_unlock(&g_connected_apps_mutex);
}
static void __mc_add_cmd_to_send(gpointer data, gpointer user_data)
static int __mc_service_app_dead_handler(int pid, void *data)
{
GList *found_app = NULL;
+ g_autoptr(GMutexLocker) locker = NULL;
mc_info("Received app_dead signal (pid : %d)", pid);
+
+ locker = g_mutex_locker_new(&g_connected_apps_mutex);
+
mc_retvm_if(!g_connected_apps, AUL_R_OK, "No connected application!");
while ((found_app = g_list_find_custom(g_connected_apps, (gconstpointer)GINT_TO_POINTER(pid),
req = (mc_service_request *) g_queue_pop_head(request_queue);
+ g_mutex_lock(&g_connected_apps_mutex);
msg = __process_msg(req->req_msg, &g_connected_apps);
+ g_mutex_unlock(&g_connected_apps_mutex);
if (write(req->client_sock, &msg, sizeof(msg)) != sizeof(msg))
mc_stderror("send failed");
mc_debug_fenter();
+ g_mutex_init(&g_connected_apps_mutex);
+
/* Get uid for login user */
ret = __mc_sys_get_uid(&uid);
if (ret < 0) {
__mc_clean_connected_apps();
+ g_mutex_clear(&g_connected_apps_mutex);
+
/* Free resources */
g_io_channel_shutdown(channel, FALSE, NULL);
g_io_channel_unref(channel);