Use focus handle pointer as user data of g_source_set_callback 64/117364/5
authorSangchul Lee <sc11.lee@samsung.com>
Mon, 6 Mar 2017 00:41:26 +0000 (09:41 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Fri, 10 Mar 2017 07:41:53 +0000 (16:41 +0900)
[Version] 0.10.97
[Profile] Common
[Issue Type] Refactorying

Change-Id: I20bf3a5311261bcfa84f402678232dbd3c48247f
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
mm_sound_client.c
packaging/libmm-sound.spec

index bfe2ad1..d17ca43 100644 (file)
@@ -74,7 +74,7 @@ struct callback_data {
 
 typedef struct _FocusSource {
        GSource source;
-       GPollFD pollfd;
+       GPollFD poll_fd;
 } FocusSource;
 
 #define GET_CB_DATA(_cb_data, _func, _userdata, _extradata) \
@@ -90,9 +90,7 @@ typedef struct {
        int focus_tid;
        int handle;
        int focus_fd;
-       GSourceFuncs *g_src_funcs;
-       GPollFD *g_poll_fd;
-       GSource *g_src;
+       FocusSource *fsrc;
        bool is_used;
        bool auto_reacquire;
        GMutex focus_lock;
@@ -120,7 +118,7 @@ typedef struct {
        void* user_data;
 } focus_session_interrupt_info_t;
 
-typedef gboolean (*focus_gLoopPollHandler_t)(gpointer d);
+typedef gboolean (*focus_callback_handler_t)(gpointer user_data);
 
 focus_sound_info_t g_focus_sound_handle[FOCUS_HANDLE_MAX];
 focus_session_interrupt_info_t g_focus_session_interrupt_info = {NULL, NULL};
@@ -1101,7 +1099,7 @@ static gboolean _focus_fd_check(GSource * source)
 #ifdef __DEBUG__
        debug_warning("CHECK : %p, 0x%x ]", source, fsource->pollfd.revents);
 #endif
-       if (fsource->pollfd.revents & (POLLIN | POLLPRI))
+       if (fsource->poll_fd.revents & (POLLIN | POLLPRI))
                return TRUE;
        else
                return FALSE;
@@ -1142,25 +1140,31 @@ static int _focus_watch_find_index_by_handle(int handle)
        return -1;
 }
 
-static gboolean _focus_callback_handler(gpointer d)
+static gboolean _focus_callback_handler(gpointer user_data)
 {
-       GPollFD *data = (GPollFD*)d;
+       focus_sound_info_t *focus_handle = (focus_sound_info_t *)user_data;
+       GPollFD *poll_fd;
        int count;
        int tid = 0;
-       int focus_index = 0;
        focus_cb_data_lib cb_data;
-       debug_log(">>> focus_callback_handler()..this thread id(%u)\n", (unsigned int)pthread_self());
 
-       memset(&cb_data, 0, sizeof(focus_cb_data_lib));
+       debug_log(">>> _focus_callback_handler(), this thread id(%u)\n", (unsigned int)pthread_self());
 
-       if (!data) {
-               debug_error("GPollFd is null");
+       memset(&cb_data, 0, sizeof(focus_cb_data_lib));
+       if (!focus_handle) {
+               debug_error("focus_handle is null");
                return G_SOURCE_CONTINUE;
        }
-       if (data->revents & (POLLIN | POLLPRI)) {
+       if (!(poll_fd = &focus_handle->fsrc->poll_fd)) {
+               debug_error("poll_fd is null");
+               return G_SOURCE_CONTINUE;
+       }
+       debug_log("focus_handle(%p), poll_fd(%p)", focus_handle, poll_fd);
+
+       if (poll_fd->revents & (POLLIN | POLLPRI)) {
                int changed_state = -1;
 
-               count = read(data->fd, &cb_data, sizeof(cb_data));
+               count = read(poll_fd->fd, &cb_data, sizeof(cb_data));
                if (count < 0){
                        char str_error[256];
                        strerror_r(errno, str_error, sizeof(str_error));
@@ -1168,28 +1172,22 @@ static gboolean _focus_callback_handler(gpointer d)
                        return G_SOURCE_CONTINUE;
                }
                changed_state = cb_data.state;
-               focus_index = _focus_find_index_by_handle(cb_data.handle);
-               if (focus_index == -1) {
-                       debug_error("Could not find index");
-                       return G_SOURCE_CONTINUE;
-               }
 
-               g_mutex_lock(&g_focus_sound_handle[focus_index].focus_lock);
+               g_mutex_lock(&focus_handle->focus_lock);
 
-               tid = g_focus_sound_handle[focus_index].focus_tid;
+               tid = focus_handle->focus_tid;
 
                if (changed_state != -1) {
                        debug_msg("Got and start CB : TID(%d), handle(%d), type(%d), state(%d,(DEACTIVATED(0)/ACTIVATED(1)), trigger(%s)",
                                        tid, cb_data.handle, cb_data.type, cb_data.state, cb_data.stream_type);
-                       if (g_focus_sound_handle[focus_index].focus_callback == NULL) {
-                                       debug_error("callback is null..");
-                                       g_mutex_unlock(&g_focus_sound_handle[focus_index].focus_lock);
+                       if (focus_handle->focus_callback == NULL) {
+                                       debug_error("focus callback is null..");
+                                       g_mutex_unlock(&focus_handle->focus_lock);
                                        return G_SOURCE_CONTINUE;
                        }
-                       debug_msg("[CALLBACK(%p) START]",g_focus_sound_handle[focus_index].focus_callback);
-                       g_focus_sound_handle[focus_index].focus_callback(cb_data.handle, cb_data.type, cb_data.state,
-                                                                                                                       cb_data.stream_type, cb_data.option, cb_data.ext_info,
-                                                                                                                       g_focus_sound_handle[focus_index].user_data);
+                       debug_msg("[CALLBACK(%p) START]", focus_handle->focus_callback);
+                       (focus_handle->focus_callback)(cb_data.handle, cb_data.type, cb_data.state, cb_data.stream_type,
+                                                                               cb_data.option, cb_data.ext_info, focus_handle->user_data);
                        debug_msg("[CALLBACK END]");
                        if (g_focus_session_interrupt_info.user_cb) {
                                debug_msg("sending session interrupt callback(%p)", g_focus_session_interrupt_info.user_cb);
@@ -1202,9 +1200,7 @@ static gboolean _focus_callback_handler(gpointer d)
                        int rett = 0;
                        int tmpfd = -1;
                        unsigned int buf = 0;
-                       char *filename2 = g_strdup_printf("/tmp/FOCUS.%d.%dr",
-                                                                                       g_focus_sound_handle[focus_index].focus_tid,
-                                                                                       cb_data.handle);
+                       char *filename2 = g_strdup_printf("/tmp/FOCUS.%d.%dr", focus_handle->focus_tid, cb_data.handle);
                        tmpfd = open(filename2, O_WRONLY | O_NONBLOCK);
                        if (tmpfd < 0) {
                                char str_error[256];
@@ -1212,12 +1208,12 @@ static gboolean _focus_callback_handler(gpointer d)
                                debug_warning("[RETCB][Failed(May Server Close First)]tid(%d) fd(%d) %s errno=%d(%s)\n",
                                                        tid, tmpfd, filename2, errno, str_error);
                                g_free(filename2);
-                               g_mutex_unlock(&g_focus_sound_handle[focus_index].focus_lock);
+                               g_mutex_unlock(&focus_handle->focus_lock);
                                return G_SOURCE_CONTINUE;
                        }
                        /* buf contains data as below,
                         * |<--12bits--><--4bits (reacquisition)--><--16bits (handle)-->| */
-                       buf = (unsigned int)((0x0000ffff & cb_data.handle) | (g_focus_sound_handle[focus_index].auto_reacquire << 16));
+                       buf = (unsigned int)((0x0000ffff & cb_data.handle) | (focus_handle->auto_reacquire << 16));
                        rett = write(tmpfd, &buf, sizeof(buf));
                        close(tmpfd);
                        g_free(filename2);
@@ -1226,29 +1222,36 @@ static gboolean _focus_callback_handler(gpointer d)
 #endif
        }
 
-       g_mutex_unlock(&g_focus_sound_handle[focus_index].focus_lock);
+       g_mutex_unlock(&focus_handle->focus_lock);
+
+       debug_fleave();
 
        return G_SOURCE_CONTINUE;
 }
 
-static gboolean _focus_watch_callback_handler(gpointer d)
+static gboolean _focus_watch_callback_handler(gpointer user_data)
 {
-       GPollFD *data = (GPollFD*)d;
+       focus_sound_info_t *focus_handle = (focus_sound_info_t *)user_data;
+       GPollFD *poll_fd;
        int count;
        int tid = 0;
-       int focus_index = 0;
        focus_cb_data_lib cb_data;
 
-       debug_fenter();
+       debug_log(">>> _focus_watch_callback_handler(), this thread id(%u)\n", (unsigned int)pthread_self());
 
        memset(&cb_data, 0, sizeof(focus_cb_data_lib));
-
-       if (!data) {
-               debug_error("GPollFd is null");
-               return G_SOURCE_CONTINUE;
+       if (!focus_handle) {
+               debug_error("focus_handle is null");
+               return FALSE;
+       }
+       if (!(poll_fd = &focus_handle->fsrc->poll_fd)) {
+               debug_error("g_poll_fd is null");
+               return FALSE;
        }
-       if (data->revents & (POLLIN | POLLPRI)) {
-               count = read(data->fd, &cb_data, sizeof(cb_data));
+       debug_log("focus_handle(%p), poll_fd(%p)", focus_handle, poll_fd);
+
+       if (poll_fd->revents & (POLLIN | POLLPRI)) {
+               count = read(poll_fd->fd, &cb_data, sizeof(cb_data));
                if (count < 0){
                        char str_error[256];
                        strerror_r(errno, str_error, sizeof(str_error));
@@ -1256,32 +1259,24 @@ static gboolean _focus_watch_callback_handler(gpointer d)
                        return G_SOURCE_CONTINUE;
                }
 
-               focus_index = _focus_watch_find_index_by_handle(cb_data.handle);
-               if (focus_index == -1) {
-                       debug_error("Could not find index");
-                       return G_SOURCE_CONTINUE;
-               }
-
-               if (!g_focus_sound_handle[focus_index].is_used) {
-                       debug_warning("unsetting watch callback has been already requested");
+               if (!focus_handle->is_used) {
+                       debug_warning("unsetting watch calllback has been already requested");
                        goto SKIP_CB_AND_RET;
                }
 
-               debug_msg("lock focus_lock = %p", &g_focus_sound_handle[focus_index].focus_lock);
-               g_mutex_lock(&g_focus_sound_handle[focus_index].focus_lock);
+               g_mutex_lock(&focus_handle->focus_lock);
 
-               tid = g_focus_sound_handle[focus_index].focus_tid;
+               tid = focus_handle->focus_tid;
 
                debug_msg("Got and start CB : TID(%d), handle(%d), type(%d), state(%d,(DEACTIVATED(0)/ACTIVATED(1)), trigger(%s)",
                                tid, cb_data.handle,  cb_data.type, cb_data.state, cb_data.stream_type);
 
-               if (g_focus_sound_handle[focus_index].watch_callback == NULL) {
-                       debug_msg("callback is null..");
+               if (focus_handle->watch_callback == NULL) {
+                       debug_msg("watch callback is null..");
                } else {
-                       debug_msg("[CALLBACK(%p) START]",g_focus_sound_handle[focus_index].watch_callback);
-                       (g_focus_sound_handle[focus_index].watch_callback)(cb_data.handle, cb_data.type, cb_data.state,
-                                                                                                                       cb_data.stream_type, cb_data.ext_info,
-                                                                                                                       g_focus_sound_handle[focus_index].user_data);
+                       debug_msg("[CALLBACK(%p) START]", focus_handle->watch_callback);
+                       (focus_handle->watch_callback)(cb_data.handle, cb_data.type, cb_data.state, cb_data.stream_type,
+                                                                               cb_data.ext_info, focus_handle->user_data);
                        debug_msg("[CALLBACK END]");
                        if (g_focus_session_interrupt_info.user_cb) {
                                debug_msg("sending session interrupt callback(%p)", g_focus_session_interrupt_info.user_cb);
@@ -1296,9 +1291,7 @@ SKIP_CB_AND_RET:
                        int rett = 0;
                        int tmpfd = -1;
                        int buf = -1;
-                       char *filename2 = g_strdup_printf("/tmp/FOCUS.%d.%d.wchr",
-                                                                                       g_focus_sound_handle[focus_index].focus_tid,
-                                                                                       cb_data.handle);
+                       char *filename2 = g_strdup_printf("/tmp/FOCUS.%d.%d.wchr", focus_handle->focus_tid, cb_data.handle);
                        tmpfd = open(filename2, O_WRONLY | O_NONBLOCK);
                        if (tmpfd < 0) {
                                char str_error[256];
@@ -1306,7 +1299,7 @@ SKIP_CB_AND_RET:
                                debug_warning("[RETCB][Failed(May Server Close First)]tid(%d) fd(%d) %s errno=%d(%s)\n",
                                                        tid, tmpfd, filename2, errno, str_error);
                                g_free(filename2);
-                               g_mutex_unlock(&g_focus_sound_handle[focus_index].focus_lock);
+                               g_mutex_unlock(&focus_handle->focus_lock);
                                return G_SOURCE_CONTINUE;
                        }
                        buf = cb_data.handle;
@@ -1318,9 +1311,9 @@ SKIP_CB_AND_RET:
 #endif
        }
 
-       if (g_focus_sound_handle[focus_index].is_used) {
-               debug_msg("unlock focus_lock = %p", &g_focus_sound_handle[focus_index].focus_lock);
-               g_mutex_unlock(&g_focus_sound_handle[focus_index].focus_lock);
+       if (focus_handle->is_used) {
+               debug_msg("unlock focus_lock = %p", &focus_handle->focus_lock);
+               g_mutex_unlock(&focus_handle->focus_lock);
        }
 
        debug_fleave();
@@ -1453,7 +1446,7 @@ static GSourceFuncs event_funcs = {
        .finalize = _focus_fd_finalize,
 };
 
-static bool _focus_add_sound_callback(int index, focus_gLoopPollHandler_t p_gloop_poll_handler)
+static bool _focus_add_sound_callback(int index, focus_callback_handler_t focus_cb_handler)
 {
        FocusSource *fsrc = NULL;
        GSource *src = NULL;
@@ -1471,14 +1464,14 @@ static bool _focus_add_sound_callback(int index, focus_gLoopPollHandler_t p_gloo
 
        fsrc = (FocusSource*) src;
 
-       fsrc->pollfd.fd = g_focus_sound_handle[index].focus_fd;
-       fsrc->pollfd.events = (gushort)(POLLIN | POLLPRI);
-       g_source_add_poll(src, &fsrc->pollfd);
+       fsrc->poll_fd.fd = g_focus_sound_handle[index].focus_fd;
+       fsrc->poll_fd.events = (gushort)(POLLIN | POLLPRI);
+       g_source_add_poll(src, &fsrc->poll_fd);
 
-       g_source_set_callback(src, p_gloop_poll_handler, (gpointer)&fsrc->pollfd, NULL);
+       g_source_set_callback(src, focus_cb_handler, (gpointer)&g_focus_sound_handle[index], NULL);
 
        debug_warning("fsrc(%p), src_funcs(%p), pollfd(%p), fd(%d)",
-                               fsrc, &event_funcs, &fsrc->pollfd, fsrc->pollfd.fd);
+                               fsrc, &event_funcs, &fsrc->poll_fd, fsrc->poll_fd.fd);
 
        fsrc_id = g_source_attach(src, g_main_loop_get_context(g_focus_sound_handle[index].focus_loop));
        if (!fsrc_id) {
@@ -1487,7 +1480,7 @@ static bool _focus_add_sound_callback(int index, focus_gLoopPollHandler_t p_gloo
        }
        g_source_unref(src);
 
-       g_focus_sound_handle[index].g_src = src;
+       g_focus_sound_handle[index].fsrc = fsrc;
 
        debug_fleave();
        return true;
@@ -1511,9 +1504,9 @@ static bool _focus_remove_sound_callback(int index)
        }
 
        h = &g_focus_sound_handle[index];
-       if (h->g_src) {
-               g_source_destroy(h->g_src);
-               h->g_src = NULL;
+       if (h->fsrc) {
+               g_source_destroy((GSource *)h->fsrc);
+               h->fsrc = NULL;
        }
 
        h->focus_callback = NULL;
index 6092106..b9de7fa 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-sound
 Summary:    MMSound Package contains client lib and sound_server binary
-Version:    0.10.96
+Version:    0.10.97
 Release:    0
 Group:      System/Libraries
 License:    Apache-2.0