Don't spin with mutex hold when there is not enough room in the send socket
buffer. While here, make the code flow somewhat nicer. Thanks to mav@ for tracking it down. Tested by: mav MFC after: 3 days Sponsored by: FreeBSD Foundation
This commit is contained in:
parent
7a74ddb4bc
commit
1602cbfff0
@ -723,11 +723,7 @@ icl_receive_thread(void *arg)
|
||||
for (;;) {
|
||||
if (ic->ic_disconnecting) {
|
||||
//ICL_DEBUG("terminating");
|
||||
ICL_CONN_LOCK(ic);
|
||||
ic->ic_receive_running = false;
|
||||
ICL_CONN_UNLOCK(ic);
|
||||
kthread_exit();
|
||||
return;
|
||||
break;
|
||||
}
|
||||
|
||||
SOCKBUF_LOCK(&so->so_rcv);
|
||||
@ -740,6 +736,11 @@ icl_receive_thread(void *arg)
|
||||
|
||||
icl_conn_receive_pdus(ic, available);
|
||||
}
|
||||
|
||||
ICL_CONN_LOCK(ic);
|
||||
ic->ic_receive_running = false;
|
||||
ICL_CONN_UNLOCK(ic);
|
||||
kthread_exit();
|
||||
}
|
||||
|
||||
static int
|
||||
@ -879,22 +880,19 @@ icl_send_thread(void *arg)
|
||||
|
||||
ICL_CONN_LOCK(ic);
|
||||
ic->ic_send_running = true;
|
||||
ICL_CONN_UNLOCK(ic);
|
||||
|
||||
for (;;) {
|
||||
ICL_CONN_LOCK(ic);
|
||||
if (ic->ic_disconnecting) {
|
||||
//ICL_DEBUG("terminating");
|
||||
ic->ic_send_running = false;
|
||||
ICL_CONN_UNLOCK(ic);
|
||||
kthread_exit();
|
||||
return;
|
||||
break;
|
||||
}
|
||||
if (TAILQ_EMPTY(&ic->ic_to_send))
|
||||
cv_wait(&ic->ic_send_cv, &ic->ic_lock);
|
||||
icl_conn_send_pdus(ic);
|
||||
ICL_CONN_UNLOCK(ic);
|
||||
cv_wait(&ic->ic_send_cv, &ic->ic_lock);
|
||||
}
|
||||
|
||||
ic->ic_send_running = false;
|
||||
ICL_CONN_UNLOCK(ic);
|
||||
kthread_exit();
|
||||
}
|
||||
|
||||
static int
|
||||
|
Loading…
Reference in New Issue
Block a user