We create a decoder thread per each xprt (connection).
Due to a bug in fridgethr_freeze() for type fridgethr_flavor_worker threads, they never exit even after closing the xprt!
The fix is to let the code go to restart label and return when there is nothing left to do.
/* Nothing to do, loop around. */
if (fr->command != fridgethr_comm_stop
&& ((fr->command == fridgethr_comm_pause)
|| fridgethr_deferredwork(fr))
&& (fr->p.flavor == fridgethr_flavor_worker)) {
PTHREAD_MUTEX_lock(&fe->ctx.mtx);
fe->frozen = true;
fe->flags |= fridgethr_flag_available;
/* Not ideal, but no ideal factoring occurred to me. */
if ((fr->p.deferment == fridgethr_defer_block)
&& (fr->deferment.block.waiters > 0)) {
pthread_cond_signal(&fr->deferment.block.cond);
}