Separate GSource from mc_manage_queue_t 92/288092/6
authorhj kim <backto.kim@samsung.com>
Fri, 10 Feb 2023 08:50:43 +0000 (17:50 +0900)
committerhj kim <backto.kim@samsung.com>
Tue, 14 Feb 2023 08:36:56 +0000 (17:36 +0900)
Change-Id: Ib6654861abb1d47dd36ce2556d7bfce125e69fbc

svc/media_controller_svc.c

index ca2397065dbaf9f585c70e25155a5584a9ad1c77..f0a1dbcb678cff81ad84dda01bf9a6df9d729700 100644 (file)
@@ -32,6 +32,7 @@
 static GMainLoop *g_mc_svc_mainloop = NULL;
 static int g_connection_cnt = -1;
 static GList *g_connected_apps;
+static GSource *g_source;
 
 typedef struct {
        int client_sock;
@@ -53,7 +54,6 @@ typedef struct {
 
 typedef struct {
        GQueue *queue;
-       GSource *source;
 } mc_manage_queue_t;
 
 typedef struct {
@@ -136,9 +136,6 @@ static void __mc_destroy_request_queue(mc_manage_queue_t *data)
        g_queue_free_full(data->queue, __mc_destroy_queue);
        data->queue = NULL;
 
-       g_source_unref(data->source);
-       data->source = NULL;
-
        g_free(data);
 }
 
@@ -603,8 +600,7 @@ static gboolean __mc_service_process(gpointer data)
 
        if (length_of_queue == 0) {
                mc_debug("There is no request job in the queue");
-               g_source_unref(_service_data->request->source);
-               _service_data->request->source = NULL;
+               g_source = NULL;
                return G_SOURCE_REMOVE;
        }
 
@@ -697,11 +693,11 @@ static gboolean __mc_read_service_request_tcp_socket(GIOChannel *src, GIOConditi
        mc_info("msg(%d) is queued", req->req_msg->msg_type);
        g_queue_push_tail(request_queue, (gpointer)req);
 
-       /* push received message to queue */
-       if (!_service_data->request->source) {
-               _service_data->request->source = g_idle_source_new();
-               g_source_set_callback(_service_data->request->source, __mc_service_process, _service_data, NULL);
-               g_source_attach(_service_data->request->source, g_main_context_get_thread_default());
+       if (!g_source) {
+               g_source = g_idle_source_new();
+               g_source_set_callback(g_source, __mc_service_process, _service_data, NULL);
+               g_source_attach(g_source, g_main_context_get_thread_default());
+               g_source_unref(g_source);
        }
 
        MC_SAFE_FREE(creds.uid);
@@ -820,6 +816,12 @@ gpointer mc_svc_thread(gpointer data)
                mc_error("Failed to unregister app_dead signal");
 
        __mc_service_deinit(mc_service_data);
+
+       if (g_source) {
+               g_source_destroy(g_source);
+               g_source = NULL;
+       }
+
        __mc_clean_connected_apps();
 
        /* Free resources */