From 6a24b283f8c9838d92c39a1ffa4adcb79b25081b Mon Sep 17 00:00:00 2001 From: Ronnie Sahlberg Date: Fri, 31 Aug 2012 16:12:21 -0700 Subject: [PATCH] TEST: If we timeout a test, drop all wait/out pdus from the list we dont want the callbacks anymore. --- test-tool/iscsi-test.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/test-tool/iscsi-test.c b/test-tool/iscsi-test.c index 4c27cf4..cda3102 100644 --- a/test-tool/iscsi-test.c +++ b/test-tool/iscsi-test.c @@ -28,6 +28,7 @@ #include #include #include +#include "slist.h" #include "iscsi.h" #include "scsi-lowlevel.h" #include "iscsi-private.h" @@ -282,7 +283,6 @@ struct iscsi_context *iscsi_context_login(const char *initiatorname, const char return iscsi; } - void wait_until_test_finished(struct iscsi_context *iscsi, struct iscsi_async_state *state) { struct pollfd pfd; @@ -300,9 +300,18 @@ void wait_until_test_finished(struct iscsi_context *iscsi, struct iscsi_async_st } if (ret == 0) { if (count++ > 5) { + struct iscsi_pdu *pdu; + state->finished = 1; state->status = SCSI_STATUS_CANCELLED; state->task->status = SCSI_STATUS_CANCELLED; + /* this may leak memory since we dont free the pdu */ + while ((pdu = iscsi->outqueue)) { + SLIST_REMOVE(&iscsi->outqueue, pdu); + } + while ((pdu = iscsi->waitpdu)) { + SLIST_REMOVE(&iscsi->waitpdu, pdu); + } return; } continue;