memset(module, 0, sizeof(muse_module_t));
module->ch[channel].fd = client_sockfd;
- g_queue_push_tail(muse_core_ipc_get_instance()->module_queue, (gpointer) module);
- LOGD("g_queue_get_length : %d [%p]", g_queue_get_length(muse_core_ipc_get_instance()->module_queue), module);
+ muse_core_ipc_get_instance()->push_data((gpointer) module);
}
if ((job = malloc(sizeof(muse_core_workqueue_job_t))) == NULL) {
static int _muse_core_ipc_verify_msg_complete(int sock_fd, char *msg, int msg_len);
static gboolean _muse_core_ipc_init_bufmgr(void);
static void _muse_core_ipc_deinit_bufmgr(void);
+static void _muse_core_ipc_push_data(gpointer data);
static void _muse_core_ipc_free(void);
-static void _muse_core_ipc_init_instance(void (*free)(void));
+static void _muse_core_ipc_init_instance(void (*push_data) (gpointer), void (*free)(void));
static int _muse_core_ipc_get_valid_fd_count(int *fds);
static void _muse_core_ipc_client_cleanup(muse_module_h module)
g_cond_clear(&module->ch[MUSE_CHANNEL_DATA].cond);
LOGD("worker exit");
+ g_mutex_lock(&g_muse_core_ipc->g_muse_ipc_queue_lock);
+
g_queue_remove(g_muse_core_ipc->module_queue, (gpointer)module);
+ LOGD("g_queue_remove %p", module);
+
+ g_mutex_unlock(&g_muse_core_ipc->g_muse_ipc_queue_lock);
muse_core_worker_exit(module);
}
LOGD("Leave");
}
+static void _muse_core_ipc_push_data(gpointer data)
+{
+ LOGD("Enter");
+
+ g_return_if_fail(g_muse_core_ipc->module_queue);
+ g_return_if_fail(data);
+
+ g_mutex_lock(&g_muse_core_ipc->g_muse_ipc_queue_lock);
+
+ g_queue_push_tail(g_muse_core_ipc->module_queue, data);
+
+ LOGD("g_queue_get_length : %d [%p]", g_queue_get_length(g_muse_core_ipc->module_queue), data);
+
+ g_mutex_unlock(&g_muse_core_ipc->g_muse_ipc_queue_lock);
+
+ LOGD("Leave");
+}
+
static void _muse_core_ipc_free(void)
{
LOGD("Enter");
LOGD("Leave");
}
-static void _muse_core_ipc_init_instance(void (*free)(void))
+static void _muse_core_ipc_init_instance(void (*push_data) (gpointer), void (*free)(void))
{
g_return_if_fail(free);
g_return_if_fail(g_muse_core_ipc == NULL);
g_muse_core_ipc->table = g_hash_table_new(g_direct_hash, g_direct_equal);
g_return_if_fail(g_muse_core_ipc->table);
+ g_muse_core_ipc->push_data = push_data;
g_muse_core_ipc->free = free;
g_muse_core_ipc->module_queue = g_queue_new();
g_return_if_fail(g_muse_core_ipc->module_queue);
LOGD("Enter");
if (g_muse_core_ipc == NULL)
- _muse_core_ipc_init_instance(_muse_core_ipc_free);
+ _muse_core_ipc_init_instance(_muse_core_ipc_push_data, _muse_core_ipc_free);
LOGD("Leave");
}