From 6b9c2ca8af9bb90d85b759d0d8f28405329fd396 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 26 Oct 2012 14:17:52 -0500 Subject: [PATCH] fix for new db stuff --- src/include/switch_core.h | 1 + src/switch_core_sqldb.c | 25 ++++++++++++++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/include/switch_core.h b/src/include/switch_core.h index 0616c532f6..69a9b07576 100644 --- a/src/include/switch_core.h +++ b/src/include/switch_core.h @@ -2425,6 +2425,7 @@ SWITCH_DECLARE(void) switch_core_recovery_untrack(switch_core_session_t *session SWITCH_DECLARE(void) switch_core_recovery_track(switch_core_session_t *session); SWITCH_DECLARE(void) switch_core_recovery_flush(const char *technology, const char *profile_name); +SWITCH_DECLARE(int) switch_sql_queue_manager_size(switch_sql_queue_manager_t *qm, uint32_t index); SWITCH_DECLARE(switch_status_t) switch_sql_queue_manager_push_confirm(switch_sql_queue_manager_t *qm, const char *sql, uint32_t pos, switch_bool_t dup); SWITCH_DECLARE(switch_status_t) switch_sql_queue_manager_push(switch_sql_queue_manager_t *qm, const char *sql, uint32_t pos, switch_bool_t dup); SWITCH_DECLARE(switch_status_t) switch_sql_queue_manager_destroy(switch_sql_queue_manager_t **qmp); diff --git a/src/switch_core_sqldb.c b/src/switch_core_sqldb.c index 0cb6f9740d..9807d9905d 100644 --- a/src/switch_core_sqldb.c +++ b/src/switch_core_sqldb.c @@ -1219,7 +1219,6 @@ struct switch_sql_queue_manager { switch_queue_t **sql_queue; uint32_t *pre_written; uint32_t *written; - int *sizes; uint32_t numq; char *dsn; switch_thread_t *thread; @@ -1257,6 +1256,18 @@ static uint32_t qm_ttl(switch_sql_queue_manager_t *qm) return ttl; } +SWITCH_DECLARE(int) switch_sql_queue_manager_size(switch_sql_queue_manager_t *qm, uint32_t index) +{ + int size = 0; + + switch_mutex_lock(qm->mutex); + if (index < qm->numq) { + size = switch_queue_size(qm->sql_queue[index]); + } + switch_mutex_unlock(qm->mutex); + + return size; +} SWITCH_DECLARE(switch_status_t) switch_sql_queue_manager_stop(switch_sql_queue_manager_t *qm) { @@ -1335,8 +1346,11 @@ SWITCH_DECLARE(switch_status_t) switch_sql_queue_manager_push(switch_sql_queue_m if (pos > qm->numq - 1) { pos = 0; } - + + switch_mutex_lock(qm->mutex); switch_queue_push(qm->sql_queue[pos], dup ? strdup(sql) : (char *)sql); + switch_mutex_unlock(qm->mutex); + qm_wake(qm); return SWITCH_STATUS_SUCCESS; @@ -1360,11 +1374,10 @@ SWITCH_DECLARE(switch_status_t) switch_sql_queue_manager_push_confirm(switch_sql pos = 0; } - switch_queue_push(qm->sql_queue[pos], dup ? strdup(sql) : (char *)sql); - switch_mutex_lock(qm->mutex); + switch_queue_push(qm->sql_queue[pos], dup ? strdup(sql) : (char *)sql); written = qm->written[pos]; - size = qm->sizes[pos]; + size = switch_sql_queue_manager_size(qm, pos); want = written + size; switch_mutex_unlock(qm->mutex); @@ -1416,7 +1429,6 @@ SWITCH_DECLARE(switch_status_t) switch_sql_queue_manager_init_name(const char *n switch_thread_cond_create(&qm->cond, qm->pool); qm->sql_queue = switch_core_alloc(qm->pool, sizeof(switch_queue_t *) * numq); - qm->sizes = switch_core_alloc(qm->pool, sizeof(int) * numq); qm->written = switch_core_alloc(qm->pool, sizeof(uint32_t) * numq); qm->pre_written = switch_core_alloc(qm->pool, sizeof(uint32_t) * numq); @@ -1650,7 +1662,6 @@ static void *SWITCH_THREAD_FUNC switch_user_sql_thread(switch_thread_t *thread, switch_mutex_lock(qm->mutex); for (i = 0; i < qm->numq; i++) { - qm->sizes[i] = switch_queue_size(qm->sql_queue[i]); qm->written[i] += qm->pre_written[i]; qm->pre_written[i] = 0; }