From 927b18dc3b2f9bf3276a595acb884b331783ae4e Mon Sep 17 00:00:00 2001 From: NicJA Date: Wed, 13 May 2015 05:23:09 +0000 Subject: [PATCH] unlock the list before calling reschedule git-svn-id: https://svn.aros.org/svn/aros/trunk/AROS@50663 fb15a70f-31f2-0310-bbcc-cdcc74a49acc --- rom/exec/signal.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/rom/exec/signal.c b/rom/exec/signal.c index de2a7b25e1..895cbe6068 100644 --- a/rom/exec/signal.c +++ b/rom/exec/signal.c @@ -89,14 +89,15 @@ /* task is running (Signal() called from within interrupt)? Raise the exception or defer it for later. */ if (task->tc_State == TS_RUN) { +#if defined(__AROSEXEC_SMP__) + EXEC_SPINLOCK_UNLOCK(task_listlock); +#endif /* Order a reschedule */ Reschedule(); /* All done. */ -#if defined(__AROSEXEC_SMP__) - EXEC_SPINLOCK_UNLOCK(task_listlock); -#endif Enable(); + return; } } @@ -127,12 +128,21 @@ (If the current task is not running it is already moved) */ if (GET_THIS_TASK->tc_State == TS_RUN) + { +#if defined(__AROSEXEC_SMP__) + EXEC_SPINLOCK_UNLOCK(task_listlock); + task_listlock = NULL; +#endif Reschedule(); + } } } #if defined(__AROSEXEC_SMP__) - EXEC_SPINLOCK_UNLOCK(task_listlock); + if (task_listlock) + { + EXEC_SPINLOCK_UNLOCK(task_listlock); + } #endif Enable(); -- 2.11.4.GIT