commit: http://blackfin.uclinux.org/git/?p=linux-kernel;a=commitdiff;h=8bc28da68e9d4969e6f2f4dcf4ccbdf4c473c18a
branch: http://blackfin.uclinux.org/git/?p=linux-kernel;a=shortlog;h=refs/heads/trunk

Signed-off-by: Steven Miao <[email protected]>
---
 drivers/staging/icc/core/protocol.c |   19 ++++++++++++++++---
 1 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/drivers/staging/icc/core/protocol.c b/drivers/staging/icc/core/protocol.c
index 1e03a42..2a67815 100644
--- a/drivers/staging/icc/core/protocol.c
+++ b/drivers/staging/icc/core/protocol.c
@@ -841,9 +841,22 @@ static int sm_destroy_session(uint32_t session_idx)
 		schedule_timeout(HZ * 2);
 		sm_debug("drain tx list1\n");
 		set_current_state(TASK_RUNNING);
+
 		mutex_lock(&table->lock);
-		if (!list_empty(&session->tx_messages))
-			break;
+
+		if (signal_pending(current)) {
+			sm_debug("signal\n");
+			while (!list_empty(&session->tx_messages)) {
+				message = list_first_entry(&session->tx_messages,
+						struct sm_message, next);
+				list_del(&message->next);
+				kfree(message);
+
+			}
+			mutex_unlock(&table->lock);
+			return -ERESTARTSYS;
+		}
+
 		message = list_first_entry(&session->tx_messages,
 					struct sm_message, next);
 		list_del(&message->next);
@@ -858,7 +871,7 @@ static int sm_destroy_session(uint32_t session_idx)
 		interruptible_sleep_on(&session->rx_wait);
 		if (signal_pending(current)) {
 			sm_debug("signal\n");
-			return -EINTR;
+			return -ERESTARTSYS;
 		}
 	}
 
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to