From 327b51ed5b2bdf0a4fc0b50a9cdd8c1f4993e49a Mon Sep 17 00:00:00 2001 From: Peter Lieven Date: Mon, 11 Mar 2013 08:44:11 +0100 Subject: [PATCH 1/2] do not reconnect if reconnect is already defered If the amount of reconnects is limited with iscsi_set_reconnect_max_retries() it might happen that iscsi_reconnect is called while there is already a deferred reconnect. Signed-off-by: Peter Lieven --- lib/connect.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/connect.c b/lib/connect.c index 86a60f8..d3fa9d1 100644 --- a/lib/connect.c +++ b/lib/connect.c @@ -219,6 +219,12 @@ int iscsi_reconnect(struct iscsi_context *old_iscsi) { struct iscsi_context *iscsi = old_iscsi; + /* if there is already a deferred reconnect do not try again */ + if (iscsi->reconnect_deferred) { + ISCSI_LOG(iscsi, 2, "reconnect initiated, but reconnect is already deferred"); + return -1; + } + ISCSI_LOG(iscsi, 2, "reconnect initiated"); /* This is mainly for tests, where we do not want to automatically From 5a94d5d73a18369e6f7b7c54674dc20b9c7d0a8e Mon Sep 17 00:00:00 2001 From: Peter Lieven Date: Mon, 11 Mar 2013 08:51:18 +0100 Subject: [PATCH 2/2] fix leak of iscsi_context in iscsi_reconnect in case the maximum number of reconnects is limited with iscsi_set_reconnect_max_retries() the an iscsi_context is leaked if the limit is exhausted. Signed-off-by: Peter Lieven --- lib/connect.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/connect.c b/lib/connect.c index d3fa9d1..7429496 100644 --- a/lib/connect.c +++ b/lib/connect.c @@ -277,6 +277,7 @@ try_again: if (iscsi_full_connect_sync(iscsi, iscsi->portal, iscsi->lun) != 0) { if (iscsi->reconnect_max_retries != -1 && retry >= iscsi->reconnect_max_retries) { iscsi_defer_reconnect(old_iscsi); + iscsi_destroy_context(iscsi); return -1; } int backoff=retry;