return;
}
+ cb_info->is_idle_cb_deactivated = TRUE;
+
if (cb_info->idle_event_list == NULL) {
- REC_LOG_INFO("No remained idle event");
+ REC_LOG_WARNING("cb_info[%p] No remained idle event", cb_info);
return;
}
continue;
}
- REC_LOG_WARNING("set NULL cb_info for event[%d] %p, it will be freed on idle callback",
- rec_idle_event->event, rec_idle_event);
+ REC_LOG_WARNING("set NULL cb_info[%p] for event[%d][%p] which will be freed in idle cb",
+ cb_info, rec_idle_event->event, rec_idle_event);
rec_idle_event->cb_info = NULL;
_recorder_client_user_callback(cb_info, rec_msg->recv_msg, rec_msg->event, rec_msg->tfd);
break;
case MUSE_RECORDER_EVENT_CLASS_THREAD_MAIN:
- rec_idle_event = g_new0(recorder_idle_event_s, 1);
- if (rec_idle_event == NULL) {
- REC_LOG_ERROR("event alloc failed");
- break;
- }
+ g_mutex_lock(&g_rec_idle_event_lock);
- rec_idle_event->event = rec_msg->event;
- rec_idle_event->cb_info = cb_info;
+ if (cb_info->is_idle_cb_deactivated) {
+ REC_LOG_WARNING("cb_info[%p] idle callback deactivated, skip event[%d]",
+ cb_info, rec_msg->event);
+ } else {
+ rec_idle_event = g_new0(recorder_idle_event_s, 1);
- strncpy(rec_idle_event->recv_msg, rec_msg->recv_msg, sizeof(rec_idle_event->recv_msg));
+ rec_idle_event->event = rec_msg->event;
+ rec_idle_event->cb_info = cb_info;
- REC_LOG_DEBUG("add recorder event[%d][%p] to IDLE", rec_msg->event, rec_idle_event);
+ strncpy(rec_idle_event->recv_msg, rec_msg->recv_msg, sizeof(rec_idle_event->recv_msg));
- 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(&g_rec_idle_event_lock);
+ REC_LOG_DEBUG("cb_info[%p] add idle event[%d][%p]",
+ cb_info, rec_idle_event->event, rec_idle_event);
- g_idle_add_full(G_PRIORITY_DEFAULT,
- (GSourceFunc)_recorder_idle_event_callback,
- (gpointer)rec_idle_event,
- NULL);
+ cb_info->idle_event_list = g_list_append(cb_info->idle_event_list, (gpointer)rec_idle_event);
+
+ g_idle_add_full(G_PRIORITY_DEFAULT,
+ (GSourceFunc)_recorder_idle_event_callback,
+ (gpointer)rec_idle_event,
+ NULL);
+ }
+
+ g_mutex_unlock(&g_rec_idle_event_lock);
break;
default:
REC_LOG_ERROR("unknown event class[%d]", rec_msg->event_class);
goto ErrorExit;
}
+ REC_LOG_WARNING("new cb_info[%p]", cb_info);
+
cb_info->is_server_connected = TRUE;
return cb_info;
cb_info->get_filename = NULL;
}
+ REC_LOG_WARNING("release cb_info[%p]", cb_info);
+
g_free(cb_info);
cb_info = NULL;