srv0srv.c:

Put back a 50 millisecond sleep in too high concurrency situations which I removed in the previous push; count also such sleeping threads to the InnoDB queue in SHOW INNODB STATUS


innobase/srv/srv0srv.c:
  Put back a 50 millisecond sleep in too high concurrency situations which I removed in the previous push; count also such sleeping threads to the InnoDB queue in SHOW INNODB STATUS
This commit is contained in:
unknown 2003-07-13 18:50:43 +03:00
commit d1b9076e51

View file

@ -1739,6 +1739,7 @@ srv_conc_enter_innodb(
trx_t* trx) /* in: transaction object associated with the
thread */
{
ibool has_slept = FALSE;
srv_conc_slot_t* slot;
ulint i;
char err_buf[1000];
@ -1759,7 +1760,7 @@ srv_conc_enter_innodb(
}
os_fast_mutex_lock(&srv_conc_mutex);
retry:
if (trx->declared_to_be_inside_innodb) {
ut_print_timestamp(stderr);
@ -1784,6 +1785,28 @@ srv_conc_enter_innodb(
return;
}
/* If the transaction is not holding resources, let it sleep for 50
milliseconds, and try again then */
if (!has_slept && !trx->has_search_latch
&& NULL == UT_LIST_GET_FIRST(trx->trx_locks)) {
has_slept = TRUE; /* We let is sleep only once to avoid
starvation */
srv_conc_n_waiting_threads++;
os_fast_mutex_unlock(&srv_conc_mutex);
os_thread_sleep(50000);
os_fast_mutex_lock(&srv_conc_mutex);
srv_conc_n_waiting_threads--;
goto retry;
}
/* Too many threads inside: put the current thread to a queue */
for (i = 0; i < OS_THREAD_MAX_N; i++) {