From: Derrick Brashear Date: Fri, 25 Sep 2009 09:19:33 +0000 (-0400) Subject: h_GetHost_r cleanup cases X-Git-Tag: openafs-devel-1_5_65~45 X-Git-Url: http://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=5d765426e597c60228e66bddaa21bf2453c74a85 h_GetHost_r cleanup cases avoid potentially leaking a cb_in or a capabilities blob; use a common exit function and free when these were left set. Reviewed-on: http://gerrit.openafs.org/496 Tested-by: Alistair Ferguson Reviewed-by: Alistair Ferguson Reviewed-by: Jeffrey Altman --- diff --git a/src/viced/host.c b/src/viced/host.c index 877c3f6..53089bc 100644 --- a/src/viced/host.c +++ b/src/viced/host.c @@ -1560,7 +1560,8 @@ h_GetHost_r(struct rx_connection *tcon) h_threadquota(host->lock.num_waiting)) { if (!held) h_Release_r(host); - return 0; + host = NULL; + goto gethost_out; } h_Lock_r(host); if (!(host->hostFlags & ALTADDR)) { @@ -1772,7 +1773,8 @@ h_GetHost_r(struct rx_connection *tcon) h_Release_r(host); host = NULL; rx_DestroyConnection(cb_in); - return 0; + cb_in = NULL; + goto gethost_out; } else { ViceLog(0, ("CB: WhoAreYou failed for host %" AFS_PTR_FMT " (%s:%d), error %d\n", @@ -2060,10 +2062,16 @@ h_GetHost_r(struct rx_connection *tcon) host->hostFlags &= ~HWHO_INPROGRESS; h_Unlock_r(host); } + + gethost_out: if (caps.Capabilities_val) free(caps.Capabilities_val); caps.Capabilities_val = NULL; caps.Capabilities_len = 0; + if (cb_in) { + rx_DestroyConnection(cb_in); + cb_in = NULL; + } return host; } /*h_GetHost_r */