chopstx_join is cancellation point.
This commit is contained in:
@@ -1,3 +1,8 @@
|
|||||||
|
2016-10-12 NIIBE Yutaka <gniibe@fsij.org>
|
||||||
|
|
||||||
|
* chopstx.c (chopstx_join, chopstx_cancel): chopstx_join is
|
||||||
|
cancellation point.
|
||||||
|
|
||||||
2016-07-11 NIIBE Yutaka <gniibe@fsij.org>
|
2016-07-11 NIIBE Yutaka <gniibe@fsij.org>
|
||||||
|
|
||||||
* mcu/stm32f103.h: Add more from Gnuk 1.1.9.
|
* mcu/stm32f103.h: Add more from Gnuk 1.1.9.
|
||||||
|
|||||||
10
chopstx.c
10
chopstx.c
@@ -1559,6 +1559,8 @@ chopstx_join (chopstx_t thd, void **ret)
|
|||||||
* We don't offer deadlock detection. It's users' responsibility.
|
* We don't offer deadlock detection. It's users' responsibility.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
chopstx_testcancel ();
|
||||||
|
|
||||||
chx_cpu_sched_lock ();
|
chx_cpu_sched_lock ();
|
||||||
if (tp->flag_detached)
|
if (tp->flag_detached)
|
||||||
{
|
{
|
||||||
@@ -1661,7 +1663,7 @@ chopstx_cancel (chopstx_t thd)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Cancellation points: cond_wait, usec_wait, and poll. */
|
/* Cancellation points: cond_wait, usec_wait, join, and poll. */
|
||||||
if (tp->state == THREAD_WAIT_CND)
|
if (tp->state == THREAD_WAIT_CND)
|
||||||
{
|
{
|
||||||
struct chx_cond *cond = (struct chx_cond *)tp->parent;
|
struct chx_cond *cond = (struct chx_cond *)tp->parent;
|
||||||
@@ -1672,6 +1674,12 @@ chopstx_cancel (chopstx_t thd)
|
|||||||
}
|
}
|
||||||
else if (tp->state == THREAD_WAIT_TIME)
|
else if (tp->state == THREAD_WAIT_TIME)
|
||||||
chx_timer_dequeue (tp);
|
chx_timer_dequeue (tp);
|
||||||
|
else if (tp->state == THREAD_WAIT_EXIT)
|
||||||
|
{
|
||||||
|
chx_spin_lock (&q_join.lock);
|
||||||
|
ll_dequeue ((struct chx_pq *)tp);
|
||||||
|
chx_spin_unlock (&q_join.lock);
|
||||||
|
}
|
||||||
else if (tp->state == THREAD_WAIT_POLL)
|
else if (tp->state == THREAD_WAIT_POLL)
|
||||||
{
|
{
|
||||||
if (tp->parent == &q_timer.q)
|
if (tp->parent == &q_timer.q)
|
||||||
|
|||||||
Reference in New Issue
Block a user