diff --git a/lib/init.c b/lib/init.c index a6312d7..1648e59 100644 --- a/lib/init.c +++ b/lib/init.c @@ -337,7 +337,10 @@ iscsi_destroy_context(struct iscsi_context *iscsi) ISCSI_LOG(iscsi,5,"memory is clean at iscsi_destroy_context() after %d mallocs, %d realloc(s), %d free(s) and %d reused small allocations",iscsi->mallocs,iscsi->reallocs,iscsi->frees,iscsi->smallocs); } - iscsi_destroy_context(iscsi->old_iscsi); + if (iscsi->old_iscsi) { + iscsi->old_iscsi->fd = -1; + iscsi_destroy_context(iscsi->old_iscsi); + } memset(iscsi, 0, sizeof(struct iscsi_context)); free(iscsi); diff --git a/lib/login.c b/lib/login.c index f0e8be4..7a2ed89 100644 --- a/lib/login.c +++ b/lib/login.c @@ -1304,6 +1304,7 @@ struct iscsi_in_pdu *in) iscsi_adjust_maxexpcmdsn(iscsi, in); iscsi->is_loggedin = 0; + ISCSI_LOG(iscsi, 2, "logout successful"); pdu->callback(iscsi, SCSI_STATUS_GOOD, NULL, pdu->private_data); return 0; diff --git a/lib/socket.c b/lib/socket.c index 5e76055..047a791 100644 --- a/lib/socket.c +++ b/lib/socket.c @@ -377,7 +377,7 @@ iscsi_disconnect(struct iscsi_context *iscsi) close(iscsi->fd); - if (iscsi->connected_portal[0]) { + if (!iscsi->pending_reconnect && iscsi->connected_portal[0]) { ISCSI_LOG(iscsi, 2, "disconnected from portal %s",iscsi->connected_portal); }