STABLE14-h_gethost_r-hold-fix-20060121

fix hold errors


(cherry picked from commit 96100b6dea66ea5053956e545ada6228aabe2e4a)
This commit is contained in:
Jeffrey Altman 2006-01-21 21:24:16 +00:00
parent 09ecb0253e
commit dcd8fa10c5

View File

@ -1025,7 +1025,7 @@ h_GetHost_r(struct rx_connection *tcon)
struct host *host;
struct host *oldHost;
int code;
int held;
int held, oheld;
struct interfaceAddr interf;
int interfValid = 0;
struct Identity *identP = NULL;
@ -1252,7 +1252,7 @@ h_GetHost_r(struct rx_connection *tcon)
if (oldHost) {
int probefail = 0;
if (!(held = h_Held_r(oldHost)))
if (!(oheld = h_Held_r(oldHost)))
h_Hold_r(oldHost);
h_Lock_r(oldHost);
@ -1279,8 +1279,11 @@ h_GetHost_r(struct rx_connection *tcon)
* Delete it! */
oldHost->hostFlags |= HOSTDELETED;
h_Unlock_r(oldHost);
h_Release_r(oldHost);
oldHost = NULL;
/* Let the holder be last release */
if (!oheld) {
h_Release_r(oldHost);
}
oldHost = NULL;
}
}
if (oldHost) {
@ -1296,7 +1299,8 @@ h_GetHost_r(struct rx_connection *tcon)
addInterfaceAddr_r(oldHost, haddr, hport);
host->hostFlags |= HOSTDELETED;
h_Unlock_r(host);
h_Release_r(host);
if (!held)
h_Release_r(host);
host = oldHost;
} else {
/* This really is a new host */