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
