-static void wake_thread(void)
+static void wake_thread(int force)
{
+ if (force) {
+ switch_thread_cond_signal(globals.cond);
+ return;
+ }
+
if (switch_mutex_trylock(globals.cond_mutex) == SWITCH_STATUS_SUCCESS) {
switch_thread_cond_signal(globals.cond);
switch_mutex_unlock(globals.cond_mutex);
t38_state_list.head = pvt;
switch_mutex_unlock(t38_state_list.mutex);
r = 1;
- wake_thread();
+ wake_thread(0);
} else {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Error launching thread\n");
}
switch_mutex_unlock(t38_state_list.mutex);
- wake_thread();
+ wake_thread(0);
return r;
}
switch_status_t tstatus = SWITCH_STATUS_SUCCESS;
t38_state_list.thread_running = 0;
- wake_thread();
+ wake_thread(1);
switch_thread_join(&tstatus, t38_state_list.thread);
memset(&globals, 0, sizeof(globals));
}
return status;
}
-static void wake_thread(void)
+static void wake_thread(int force)
{
+ if (force) {
+ switch_thread_cond_signal(sql_manager.cond);
+ return;
+ }
+
if (switch_mutex_trylock(sql_manager.cond_mutex) == SWITCH_STATUS_SUCCESS) {
switch_thread_cond_signal(sql_manager.cond);
switch_mutex_unlock(sql_manager.cond_mutex);
switch_queue_push(sql_manager.sql_queue[0], sql[i]);
}
sql[i] = NULL;
- wake_thread();
+ wake_thread(0);
}
}
}
switch_queue_push(sql_manager.sql_queue[0], NULL);
switch_queue_push(sql_manager.sql_queue[1], NULL);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Waiting for unfinished SQL transactions\n");
- wake_thread();
+ wake_thread(1);
}
sql_manager.thread_running = -1;