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 <alistair.ferguson@mac.com>
Reviewed-by: Alistair Ferguson <alistair.ferguson@mac.com>
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
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)) {
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",
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 */