lib/nvmf: Free listener if executing listening failed.
We callocated the listener, but if we to execute the listening behaviors which got failed, and all the other resources have been released, only left listener. Fixes issue #1326. Signed-off-by: yidong0635 <dongx.yi@intel.com> Change-Id: I020b509caed79e9880d07b01888ed389630ff67f Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1595 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
This commit is contained in:
parent
2f585d32c8
commit
fdd5151e6b
@ -208,6 +208,7 @@ spdk_nvmf_transport_listen(struct spdk_nvmf_transport *transport,
|
||||
const struct spdk_nvme_transport_id *trid)
|
||||
{
|
||||
struct spdk_nvmf_listener *listener;
|
||||
int rc;
|
||||
|
||||
listener = spdk_nvmf_transport_find_listener(transport, trid);
|
||||
if (!listener) {
|
||||
@ -219,7 +220,13 @@ spdk_nvmf_transport_listen(struct spdk_nvmf_transport *transport,
|
||||
listener->ref = 1;
|
||||
listener->trid = *trid;
|
||||
TAILQ_INSERT_TAIL(&transport->listeners, listener, link);
|
||||
return transport->ops->listen(transport, &listener->trid);
|
||||
|
||||
rc = transport->ops->listen(transport, &listener->trid);
|
||||
if (rc != 0) {
|
||||
TAILQ_REMOVE(&transport->listeners, listener, link);
|
||||
free(listener);
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
++listener->ref;
|
||||
|
Loading…
Reference in New Issue
Block a user