BUG/MEDIUM: listener: make sure we don't pick stopped threads
Dragan Dosen reported that after the multi-queue changes, appending "process 1/even" on a bind line can make the process immediately crash when delivering a first connection. This is due to the fact that I believed that thread_mask(mask) applied the all_threads_mask value, but it doesn't. And in case of even/odd the bits cover more than the available threads, resulting in too high a thread number being selected and a non-existing task to be woken up. No backport is needed.
This commit is contained in:
parent
b0cef35b09
commit
897e2c58e6
|
@ -845,7 +845,7 @@ void listener_accept(int fd)
|
||||||
next_actconn = 0;
|
next_actconn = 0;
|
||||||
|
|
||||||
#if defined(USE_THREAD)
|
#if defined(USE_THREAD)
|
||||||
mask = thread_mask(l->bind_conf->bind_thread);
|
mask = thread_mask(l->bind_conf->bind_thread) & all_threads_mask;
|
||||||
if (atleast2(mask) && (global.tune.options & GTUNE_LISTENER_MQ)) {
|
if (atleast2(mask) && (global.tune.options & GTUNE_LISTENER_MQ)) {
|
||||||
struct accept_queue_ring *ring;
|
struct accept_queue_ring *ring;
|
||||||
unsigned int t, t0, t1, t2;
|
unsigned int t, t0, t1, t2;
|
||||||
|
|
Loading…
Reference in New Issue