char *tmp, *sqlbuf = (char *) malloc(sql_len);
char *sql = NULL, *save_sql = NULL;
switch_size_t newlen;
- int lc = 0;
+ int lc = 0, wrote = 0, do_sleep = 1;
uint32_t sanity = 120;
-
+
switch_assert(sqlbuf);
while (!sql_manager.event_db) {
#endif
save_sql = sql;
sql = NULL;
+ lc = 0;
goto skip;
}
}
}
}
- skip:
-
lc = switch_queue_size(sql_manager.sql_queue[0]) + switch_queue_size(sql_manager.sql_queue[1]);
+
+ skip:
+ wrote = 0;
+
if (trans && iterations && (iterations > target || !lc)) {
#ifdef DEBUG_SQL
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT,
len = 0;
*sqlbuf = '\0';
lc = 0;
- switch_yield(400000);
+ if (do_sleep) {
+ switch_yield(200000);
+ }
+ wrote = 1;
}
- lc = sql ? 1 : 0 + switch_queue_size(sql_manager.sql_queue[0]) + switch_queue_size(sql_manager.sql_queue[1]);
+ lc = switch_queue_size(sql_manager.sql_queue[0]) + switch_queue_size(sql_manager.sql_queue[1]);
if (!lc) {
switch_thread_cond_wait(sql_manager.cond, sql_manager.cond_mutex);
+ } else if (wrote) {
+ if (lc > 2000) {
+ do_sleep = 0;
+ } else {
+ do_sleep = 1;
+ }
}
+
+
}
switch_mutex_unlock(sql_manager.cond_mutex);