diff --git a/kernel/cobalt/posix/signal.c b/kernel/cobalt/posix/signal.c index e870283d0c5b25fc14d9359a146b2d18b9551326..28358fba5e5dcfc9060db34db37987a880427ea9 100644 --- a/kernel/cobalt/posix/signal.c +++ b/kernel/cobalt/posix/signal.c @@ -176,6 +176,7 @@ void cobalt_signal_flush(struct cobalt_thread *thread) { struct cobalt_sigpending *sigp, *tmp; struct list_head *sigq; + spl_t s; int n; /* @@ -194,8 +195,15 @@ void cobalt_signal_flush(struct cobalt_thread *thread) * detect this fact when deleting their respective * owners. */ - list_for_each_entry_safe(sigp, tmp, sigq, next) + list_for_each_entry_safe(sigp, tmp, sigq, next) { list_del_init(&sigp->next); + if ((void *)sigp >= sigpending_mem && + (void *)sigp < sigpending_mem + __SIGPOOL_SIZE) { + xnlock_get_irqsave(&nklock, s); + list_add_tail(&sigp->next, &sigpending_pool); + xnlock_put_irqrestore(&nklock, s); + } + } } sigemptyset(&thread->sigpending);