mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-03-31 02:33:44 +00:00
set conditionals to only fire when the mutex can be obtained
This commit is contained in:
parent
d7c5cb2e33
commit
07ec7867db
@ -120,6 +120,16 @@ static struct {
|
|||||||
int thread_running;
|
int thread_running;
|
||||||
} t38_state_list;
|
} t38_state_list;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void wake_thread(void)
|
||||||
|
{
|
||||||
|
if (switch_mutex_trylock(globals.cond_mutex) == SWITCH_STATUS_SUCCESS) {
|
||||||
|
switch_thread_cond_signal(globals.cond);
|
||||||
|
switch_mutex_unlock(globals.cond_mutex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int add_pvt(pvt_t *pvt)
|
static int add_pvt(pvt_t *pvt)
|
||||||
{
|
{
|
||||||
int r = 0;
|
int r = 0;
|
||||||
@ -130,7 +140,7 @@ static int add_pvt(pvt_t *pvt)
|
|||||||
t38_state_list.head = pvt;
|
t38_state_list.head = pvt;
|
||||||
switch_mutex_unlock(t38_state_list.mutex);
|
switch_mutex_unlock(t38_state_list.mutex);
|
||||||
r = 1;
|
r = 1;
|
||||||
switch_thread_cond_broadcast(globals.cond);
|
wake_thread();
|
||||||
} else {
|
} else {
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Error launching thread\n");
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Error launching thread\n");
|
||||||
}
|
}
|
||||||
@ -165,7 +175,7 @@ static int del_pvt(pvt_t *del_pvt)
|
|||||||
|
|
||||||
switch_mutex_unlock(t38_state_list.mutex);
|
switch_mutex_unlock(t38_state_list.mutex);
|
||||||
|
|
||||||
switch_thread_cond_broadcast(globals.cond);
|
wake_thread();
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
@ -1335,7 +1345,7 @@ void mod_spandsp_fax_shutdown(void)
|
|||||||
switch_status_t tstatus = SWITCH_STATUS_SUCCESS;
|
switch_status_t tstatus = SWITCH_STATUS_SUCCESS;
|
||||||
|
|
||||||
t38_state_list.thread_running = 0;
|
t38_state_list.thread_running = 0;
|
||||||
switch_thread_cond_broadcast(globals.cond);
|
wake_thread();
|
||||||
switch_thread_join(&tstatus, t38_state_list.thread);
|
switch_thread_join(&tstatus, t38_state_list.thread);
|
||||||
memset(&globals, 0, sizeof(globals));
|
memset(&globals, 0, sizeof(globals));
|
||||||
}
|
}
|
||||||
|
@ -464,6 +464,14 @@ static switch_status_t switch_cache_db_execute_sql_real(switch_cache_db_handle_t
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void wake_thread(void)
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
OMFG you cruel bastards. Who chooses 64k as a max buffer len for a sql statement, have you ever heard of transactions?
|
OMFG you cruel bastards. Who chooses 64k as a max buffer len for a sql statement, have you ever heard of transactions?
|
||||||
**/
|
**/
|
||||||
@ -1399,7 +1407,7 @@ static void core_event_handler(switch_event_t *event)
|
|||||||
switch_queue_push(sql_manager.sql_queue[0], sql[i]);
|
switch_queue_push(sql_manager.sql_queue[0], sql[i]);
|
||||||
}
|
}
|
||||||
sql[i] = NULL;
|
sql[i] = NULL;
|
||||||
switch_thread_cond_broadcast(sql_manager.cond);
|
wake_thread();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1673,7 +1681,7 @@ void switch_core_sqldb_stop(void)
|
|||||||
switch_queue_push(sql_manager.sql_queue[0], NULL);
|
switch_queue_push(sql_manager.sql_queue[0], NULL);
|
||||||
switch_queue_push(sql_manager.sql_queue[1], 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");
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Waiting for unfinished SQL transactions\n");
|
||||||
switch_thread_cond_broadcast(sql_manager.cond);
|
wake_thread();
|
||||||
}
|
}
|
||||||
|
|
||||||
sql_manager.thread_running = -1;
|
sql_manager.thread_running = -1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user