For the case where another thread was doing a connect and that

connect failed, the thread would be left stuck in msleep()
indefinitely, since it would call msleep() again for the case
where rc_client == NULL. Change the loop criteria and the if just
after the loop, so that this case is handled correctly.

Reviewed by:	dfr
Approved by:	kib (mentor)
This commit is contained in:
rmacklem 2009-06-10 19:02:09 +00:00
parent d5b1c989db
commit 6e30b78167

View File

@ -154,7 +154,7 @@ clnt_reconnect_connect(CLIENT *cl)
return (RPC_CANTSEND);
}
if (rc->rc_connecting) {
while (!rc->rc_closed && !rc->rc_client) {
while (!rc->rc_closed && !rc->rc_client && rc->rc_connecting) {
error = msleep(rc, &rc->rc_lock,
rc->rc_intr ? PCATCH : 0, "rpcrecon", 0);
if (error) {
@ -166,7 +166,7 @@ clnt_reconnect_connect(CLIENT *cl)
* If the other guy failed to connect, we might as
* well have another go.
*/
if (!rc->rc_client && !rc->rc_connecting)
if (!rc->rc_client || rc->rc_closed)
goto again;
mtx_unlock(&rc->rc_lock);
return (RPC_SUCCESS);