From: Jeffrey Altman Date: Sat, 21 Jan 2006 21:22:47 +0000 (+0000) Subject: h_gethost_r-hold-fix-20060121 X-Git-Tag: openafs-devel-1_5_0~83 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=96100b6dea66ea5053956e545ada6228aabe2e4a;p=packages%2Fo%2Fopenafs.git h_gethost_r-hold-fix-20060121 fix hold errors --- diff --git a/src/viced/host.c b/src/viced/host.c index 7db74876a..fad570a49 100644 --- a/src/viced/host.c +++ b/src/viced/host.c @@ -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 */