Commit fdd5151e authored by yidong0635's avatar yidong0635 Committed by Tomasz Zawadzki
Browse files

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: default avataryidong0635 <dongx.yi@intel.com>
Change-Id: I020b509caed79e9880d07b01888ed389630ff67f
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1595


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarDarek Stojaczyk <dariusz.stojaczyk@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
parent 2f585d32
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -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;