cb_info = rec_idle_event->cb_info;
if (cb_info == NULL) {
- LOGW("recorder cb_info is NULL. event %d", rec_idle_event->event);
+ LOGW("recorder cb_info is NULL. event %p %d", rec_idle_event, rec_idle_event->event);
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);
g_mutex_unlock(&cb_info->idle_event_mutex);
/* user callback */
- _recorder_client_user_callback(rec_idle_event->cb_info, rec_idle_event->recv_msg, rec_idle_event->event);
+ _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);
}
-static void _recorder_remove_idle_event_all(recorder_cb_info_s *cb_info)
+static void _recorder_deactivate_idle_event_all(recorder_cb_info_s *cb_info)
{
recorder_idle_event_s *rec_idle_event = NULL;
- gboolean ret = true;
GList *list = NULL;
gint64 end_time = 0;
}
if (!g_mutex_trylock(&rec_idle_event->event_mutex)) {
- LOGW("lock failed");
+ LOGW("lock failed, %p event is calling now", rec_idle_event);
end_time = g_get_monotonic_time() + G_TIME_SPAN_MILLISECOND * 100;
continue;
}
- ret = g_idle_remove_by_data(rec_idle_event);
-
- LOGD("remove event %p, ret %d", rec_idle_event, ret);
+ LOGW("set NULL cb_info for event %p %d, it will be freed on idle callback",
+ rec_idle_event, rec_idle_event->event);
- if (!ret) {
- rec_idle_event->cb_info = NULL;
- LOGW("idle cb for event %p will be called later", rec_idle_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);
-
- if (ret) {
- g_mutex_clear(&rec_idle_event->event_mutex);
-
- g_free(rec_idle_event);
- rec_idle_event = NULL;
-
- LOGD("remove event done");
- }
}
g_list_free(cb_info->idle_event_list);
LOGW("server disconnected. release resource without send message.");
if (ret == RECORDER_ERROR_NONE) {
- _recorder_remove_idle_event_all(pc->cb_info);
+ _recorder_deactivate_idle_event_all(pc->cb_info);
_recorder_client_callback_destroy(pc->cb_info);
g_free(pc);
pc = NULL;