Merge branch 'tizen' into tizen_line_coverage
[platform/core/api/recorder.git] / src / recorder.c
index bb93beb..a575ec5 100644 (file)
@@ -43,6 +43,7 @@ static GList *g_rec_dev_state_changed_cb_list;
 static int g_rec_dev_state_changed_cb_id;
 static GDBusConnection *g_rec_dev_state_changed_cb_conn;
 static guint g_rec_dev_state_changed_cb_subscribe_id;
+static GMutex g_rec_idle_event_lock;
 
 
 
@@ -422,49 +423,41 @@ static void _recorder_client_user_callback(recorder_cb_info_s *cb_info, char *re
 }
 
 
-static bool _recorder_idle_event_callback(void *data)
+static gboolean _recorder_idle_event_callback(gpointer data)
 {
        recorder_cb_info_s *cb_info = NULL;
        recorder_idle_event_s *rec_idle_event = (recorder_idle_event_s *)data;
 
        if (rec_idle_event == NULL) {
                LOGE("rec_idle_event is NULL");
-               return false;
+               return FALSE;
        }
 
        /* lock event */
-       g_mutex_lock(&rec_idle_event->event_mutex);
+       g_mutex_lock(&g_rec_idle_event_lock);
 
        cb_info = rec_idle_event->cb_info;
        if (cb_info == NULL) {
                LOGW("recorder cb_info is NULL. event %p %d", rec_idle_event, rec_idle_event->event);
+               g_mutex_unlock(&g_rec_idle_event_lock);
                goto IDLE_EVENT_CALLBACK_DONE;
        }
 
        /* remove event from list */
-       g_mutex_lock(&cb_info->idle_event_mutex);
-
        if (cb_info->idle_event_list)
                cb_info->idle_event_list = g_list_remove(cb_info->idle_event_list, (gpointer)rec_idle_event);
 
-       /*LOGD("remove recorder idle event %p, %p", rec_idle_event, cb_info->idle_event_list);*/
-       g_mutex_unlock(&cb_info->idle_event_mutex);
+       g_mutex_unlock(&g_rec_idle_event_lock);
 
        /* user callback */
        _recorder_client_user_callback(cb_info, rec_idle_event->recv_msg, rec_idle_event->event);
 
-       /* send signal for waiting thread */
-       g_cond_signal(&cb_info->idle_event_cond);
-
 IDLE_EVENT_CALLBACK_DONE:
-       /* unlock and release event */
-       g_mutex_unlock(&rec_idle_event->event_mutex);
-       g_mutex_clear(&rec_idle_event->event_mutex);
-
+       /* release event */
        g_free(rec_idle_event);
        rec_idle_event = NULL;
 
-       return false;
+       return FALSE;
 }
 
 
@@ -472,14 +465,13 @@ static void _recorder_deactivate_idle_event_all(recorder_cb_info_s *cb_info)
 {
        recorder_idle_event_s *rec_idle_event = NULL;
        GList *list = NULL;
-       gint64 end_time = 0;
 
        if (cb_info == NULL) {
                LOGE("cb_info is NULL");
                return;
        }
 
-       g_mutex_lock(&cb_info->idle_event_mutex);
+       g_mutex_lock(&g_rec_idle_event_lock);
 
        if (cb_info->idle_event_list == NULL) {
                LOGD("No event");
@@ -500,43 +492,25 @@ static void _recorder_deactivate_idle_event_all(recorder_cb_info_s *cb_info)
 
                                cb_info->idle_event_list = g_list_remove(cb_info->idle_event_list, (gpointer)rec_idle_event);
 
-                               g_mutex_clear(&rec_idle_event->event_mutex);
                                g_free(rec_idle_event);
                                rec_idle_event = NULL;
 
                                continue;
                        }
 
-                       LOGW("remove idle event %p failed", rec_idle_event);
-
-                       if (!g_mutex_trylock(&rec_idle_event->event_mutex)) {
-                               LOGW("lock failed, %p event is calling now", rec_idle_event);
-
-                               end_time = g_get_monotonic_time() + G_TIME_SPAN_MILLISECOND * 100;
-
-                               if (g_cond_wait_until(&cb_info->idle_event_cond, &cb_info->idle_event_mutex, end_time))
-                                       LOGW("signal received");
-                               else
-                                       LOGW("timeout");
-
-                               continue;
-                       }
-
                        LOGW("set NULL cb_info for event %p %d, it will be freed on idle callback",
                                rec_idle_event, rec_idle_event->event);
 
                        rec_idle_event->cb_info = NULL;
 
                        cb_info->idle_event_list = g_list_remove(cb_info->idle_event_list, (gpointer)rec_idle_event);
-
-                       g_mutex_unlock(&rec_idle_event->event_mutex);
                }
 
                g_list_free(cb_info->idle_event_list);
                cb_info->idle_event_list = NULL;
        }
 
-       g_mutex_unlock(&cb_info->idle_event_mutex);
+       g_mutex_unlock(&g_rec_idle_event_lock);
 
        return;
 }
@@ -886,14 +860,14 @@ static void *_recorder_msg_handler_func(gpointer data)
 
                                rec_idle_event->event = rec_msg->event;
                                rec_idle_event->cb_info = cb_info;
-                               g_mutex_init(&rec_idle_event->event_mutex);
+
                                strncpy(rec_idle_event->recv_msg, rec_msg->recv_msg, sizeof(rec_idle_event->recv_msg) - 1);
 
                                /*LOGD("add recorder event[%d, %p] to IDLE", rec_msg->event, rec_idle_event);*/
 
-                               g_mutex_lock(&cb_info->idle_event_mutex);
+                               g_mutex_lock(&g_rec_idle_event_lock);
                                cb_info->idle_event_list = g_list_append(cb_info->idle_event_list, (gpointer)rec_idle_event);
-                               g_mutex_unlock(&cb_info->idle_event_mutex);
+                               g_mutex_unlock(&g_rec_idle_event_lock);
 
                                g_idle_add_full(G_PRIORITY_DEFAULT,
                                        (GSourceFunc)_recorder_idle_event_callback,
@@ -1196,9 +1170,6 @@ static recorder_cb_info_s *_recorder_client_callback_new(gint sockfd)
                g_cond_init(&cb_info->api_cond[i]);
        }
 
-       g_mutex_init(&cb_info->idle_event_mutex);
-       g_cond_init(&cb_info->idle_event_cond);
-
        for (i = 0 ; i < MUSE_RECORDER_EVENT_TYPE_NUM ; i++)
                g_mutex_init(&cb_info->user_cb_mutex[i]);
 
@@ -1247,9 +1218,6 @@ ErrorExit:
                for (i = 0 ; i < MUSE_RECORDER_EVENT_TYPE_NUM ; i++)
                        g_mutex_clear(&cb_info->user_cb_mutex[i]);
 
-               g_mutex_clear(&cb_info->idle_event_mutex);
-               g_cond_clear(&cb_info->idle_event_cond);
-
                for (i = 0 ; i < MUSE_RECORDER_API_MAX ; i++) {
                        g_mutex_clear(&cb_info->api_mutex[i]);
                        g_cond_clear(&cb_info->api_cond[i]);
@@ -1425,9 +1393,6 @@ static void _recorder_client_callback_destroy(recorder_cb_info_s *cb_info)
        for (i = 0 ; i < MUSE_RECORDER_EVENT_TYPE_NUM ; i++)
                g_mutex_clear(&cb_info->user_cb_mutex[i]);
 
-       g_mutex_clear(&cb_info->idle_event_mutex);
-       g_cond_clear(&cb_info->idle_event_cond);
-
        for (i = 0 ; i < MUSE_RECORDER_API_MAX ; i++) {
                g_mutex_clear(&cb_info->api_mutex[i]);
                g_cond_clear(&cb_info->api_cond[i]);
@@ -1641,7 +1606,7 @@ static int _recorder_create_common(recorder_h *recorder, muse_recorder_type_e ty
        pc->remote_handle = handle;
        pc->cb_info->bufmgr = bufmgr;
 
-       LOGD("recorder[type %d] %p create success : remote handle 0x%x",
+       LOGD("recorder[type %d] %p create success : remote handle 0x%td",
                type, pc, pc->remote_handle);
 
        *recorder = (recorder_h)pc;
@@ -1710,7 +1675,7 @@ int recorder_get_state(recorder_h recorder, recorder_state_e *state)
                return RECORDER_ERROR_INVALID_PARAMETER;
        }
 
-       LOGD("Enter, remote_handle : %x", pc->remote_handle);
+       LOGD("Enter, remote_handle : %td", pc->remote_handle);
 
        _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT);
 
@@ -2056,7 +2021,7 @@ int recorder_foreach_supported_video_resolution(recorder_h recorder,
                return RECORDER_ERROR_INVALID_PARAMETER;
        }
 
-       LOGD("Enter, handle :%x", pc->remote_handle);
+       LOGD("Enter, handle :%td", pc->remote_handle);
 
        pc->cb_info->user_cb[MUSE_RECORDER_EVENT_TYPE_FOREACH_SUPPORTED_VIDEO_RESOLUTION] = foreach_cb;
        pc->cb_info->user_data[MUSE_RECORDER_EVENT_TYPE_FOREACH_SUPPORTED_VIDEO_RESOLUTION] = user_data;
@@ -2117,7 +2082,7 @@ int recorder_set_filename(recorder_h recorder, const char *filename)
        length = strlen(filename);
 
        if (length >= RECORDER_FILENAME_MAX - 1) {
-               LOGE("too long file name [%d]", length);
+               LOGE("too long file name [%zu]", length);
                return RECORDER_ERROR_INVALID_PARAMETER;
        }
 
@@ -2315,7 +2280,7 @@ int recorder_set_state_changed_cb(recorder_h recorder, recorder_state_changed_cb
                return RECORDER_ERROR_INVALID_PARAMETER;
        }
 
-       LOGD("Enter, handle :%x", pc->remote_handle);
+       LOGD("Enter, handle :%td", pc->remote_handle);
 
        _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT);
 
@@ -2375,7 +2340,7 @@ int recorder_set_interrupted_cb(recorder_h recorder, recorder_interrupted_cb cal
                return RECORDER_ERROR_INVALID_PARAMETER;
        }
 
-       LOGD("Enter, handle :%x", pc->remote_handle);
+       LOGD("Enter, handle :%td", pc->remote_handle);
 
        _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT);
 
@@ -2435,7 +2400,7 @@ int recorder_set_interrupt_started_cb(recorder_h recorder, recorder_interrupt_st
                return RECORDER_ERROR_INVALID_PARAMETER;
        }
 
-       LOGD("Enter, handle :%x", pc->remote_handle);
+       LOGD("Enter, handle :%td", pc->remote_handle);
 
        _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT);
 
@@ -2495,7 +2460,7 @@ int recorder_set_audio_stream_cb(recorder_h recorder, recorder_audio_stream_cb c
                return RECORDER_ERROR_INVALID_PARAMETER;
        }
 
-       LOGD("Enter, handle :%x", pc->remote_handle);
+       LOGD("Enter, handle :%td", pc->remote_handle);
 
        _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT);
 
@@ -2555,7 +2520,7 @@ int recorder_set_muxed_stream_cb(recorder_h recorder, recorder_muxed_stream_cb c
                return RECORDER_ERROR_INVALID_PARAMETER;
        }
 
-       LOGD("Enter, handle :%x", pc->remote_handle);
+       LOGD("Enter, handle :%td", pc->remote_handle);
 
        _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT);
 
@@ -2615,7 +2580,7 @@ int recorder_set_error_cb(recorder_h recorder, recorder_error_cb callback, void
                return RECORDER_ERROR_INVALID_PARAMETER;
        }
 
-       LOGD("Enter, handle :%x", pc->remote_handle);
+       LOGD("Enter, handle :%td", pc->remote_handle);
 
        _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT);
 
@@ -2675,7 +2640,7 @@ int recorder_set_recording_status_cb(recorder_h recorder, recorder_recording_sta
                return RECORDER_ERROR_INVALID_PARAMETER;
        }
 
-       LOGD("Enter, handle :%x", pc->remote_handle);
+       LOGD("Enter, handle :%td", pc->remote_handle);
 
        _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT);
 
@@ -2793,7 +2758,7 @@ int recorder_foreach_supported_file_format(recorder_h recorder, recorder_support
                return RECORDER_ERROR_INVALID_PARAMETER;
        }
 
-       LOGD("Enter, handle :%x", pc->remote_handle);
+       LOGD("Enter, handle :%td", pc->remote_handle);
 
        pc->cb_info->user_cb[MUSE_RECORDER_EVENT_TYPE_FOREACH_SUPPORTED_FILE_FORMAT] = foreach_cb;
        pc->cb_info->user_data[MUSE_RECORDER_EVENT_TYPE_FOREACH_SUPPORTED_FILE_FORMAT] = user_data;
@@ -3244,7 +3209,7 @@ int recorder_foreach_supported_audio_encoder(recorder_h recorder, recorder_suppo
                return RECORDER_ERROR_INVALID_PARAMETER;
        }
 
-       LOGD("Enter, handle :%x", pc->remote_handle);
+       LOGD("Enter, handle :%td", pc->remote_handle);
 
        pc->cb_info->user_cb[MUSE_RECORDER_EVENT_TYPE_FOREACH_SUPPORTED_AUDIO_ENCODER] = foreach_cb;
        pc->cb_info->user_data[MUSE_RECORDER_EVENT_TYPE_FOREACH_SUPPORTED_AUDIO_ENCODER] = user_data;
@@ -3268,7 +3233,7 @@ int recorder_foreach_supported_video_encoder(recorder_h recorder, recorder_suppo
                return RECORDER_ERROR_INVALID_PARAMETER;
        }
 
-       LOGD("Enter, handle :%x", pc->remote_handle);
+       LOGD("Enter, handle :%td", pc->remote_handle);
 
        pc->cb_info->user_cb[MUSE_RECORDER_EVENT_TYPE_FOREACH_SUPPORTED_VIDEO_ENCODER] = foreach_cb;
        pc->cb_info->user_data[MUSE_RECORDER_EVENT_TYPE_FOREACH_SUPPORTED_VIDEO_ENCODER] = user_data;