switch_console_set_complete("del sofia");
switch_mutex_lock(mod_sofia_globals.mutex);
-
- for (i = 0; i < mod_sofia_globals.msg_queue_len; i++) {
- switch_queue_push(mod_sofia_globals.msg_queue[i], NULL);
- }
-
if (mod_sofia_globals.running == 1) {
mod_sofia_globals.running = 0;
}
}
}
+
+ for (i = 0; i < mod_sofia_globals.msg_queue_len; i++) {
+ switch_queue_push(mod_sofia_globals.msg_queue[i], NULL);
+ }
+
for (i = 0; i < mod_sofia_globals.msg_queue_len; i++) {
switch_status_t st;
switch_thread_join(&st, mod_sofia_globals.msg_queue_thread[i]);
}
+
//switch_yield(1000000);
su_deinit();
switch_channel_set_flag(channel, CF_MEDIA_ACK);
break;
case nua_r_shutdown:
- if (status >= 200)
+ if (status >= 200) {
su_root_break(profile->s_root);
+ }
break;
case nua_r_message:
sofia_handle_sip_r_message(status, profile, nh, sip);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "MSG Thread Started\n");
- while (mod_sofia_globals.running == 1) {
-
- if (switch_queue_pop(q, &pop) == SWITCH_STATUS_SUCCESS) {
- sofia_dispatch_event_t *de = (sofia_dispatch_event_t *) pop;
-
- if (!pop) {
- break;
- }
- sofia_process_dispatch_event(&de);
- }
- }
-
- while (switch_queue_trypop(q, &pop) == SWITCH_STATUS_SUCCESS && pop) {
+ while(switch_queue_pop(q, &pop) == SWITCH_STATUS_SUCCESS && pop) {
sofia_dispatch_event_t *de = (sofia_dispatch_event_t *) pop;
- nua_handle_unref(de->nh);
- nua_destroy_event(de->event);
- free(de);
+ sofia_process_dispatch_event(&de);
}
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "MSG Thread Ended\n");
{
int idx = 0;
+ if (mod_sofia_globals.running == 0) {
+ sofia_process_dispatch_event(&de);
+ return;
+ }
+
again:
switch_mutex_lock(mod_sofia_globals.mutex);