diff --git a/ext-src/swoole_process.cc b/ext-src/swoole_process.cc index 0195af9eb25..b3fd2cbbabb 100644 --- a/ext-src/swoole_process.cc +++ b/ext-src/swoole_process.cc @@ -454,7 +454,11 @@ static PHP_METHOD(swoole_process, signal) { if (zcallback == nullptr) { fci_cache = signal_fci_caches[signo]; if (fci_cache) { +#ifdef SW_USE_THREAD_CONTEXT + swoole_event_defer([signo](void *) { swoole_signal_set(signo, nullptr); }, nullptr); +#else swoole_signal_set(signo, nullptr); +#endif signal_fci_caches[signo] = nullptr; swoole_event_defer(sw_zend_fci_cache_free, fci_cache); SwooleTG.signal_listener_num--; @@ -486,7 +490,11 @@ static PHP_METHOD(swoole_process, signal) { SwooleTG.signal_listener_num++; } signal_fci_caches[signo] = fci_cache; +#ifdef SW_USE_THREAD_CONTEXT + swoole_event_defer([signo, handler](void *) { swoole_signal_set(signo, handler); }, nullptr); +#else swoole_signal_set(signo, handler); +#endif RETURN_TRUE; } @@ -506,7 +514,11 @@ static PHP_METHOD(swoole_process, signal) { } signal_fci_caches[signo] = fci_cache; +#ifdef SW_USE_THREAD_CONTEXT + swoole_event_defer([signo, handler](void *) { swoole_signal_set(signo, handler); }, nullptr); +#else swoole_signal_set(signo, handler); +#endif RETURN_TRUE; } diff --git a/package.xml b/package.xml index 13223871b59..d472421f91c 100644 --- a/package.xml +++ b/package.xml @@ -2415,5 +2415,9 @@ + + + + diff --git a/src/coroutine/thread_context.cc b/src/coroutine/thread_context.cc index 46b4cc1fe7e..8dc232249bf 100644 --- a/src/coroutine/thread_context.cc +++ b/src/coroutine/thread_context.cc @@ -16,6 +16,7 @@ #include "swoole_api.h" #include "swoole_async.h" +#include "swoole_signal.h" #include "swoole_coroutine_context.h" #ifdef SW_USE_THREAD_CONTEXT @@ -88,6 +89,7 @@ bool Context::swap_out() { } void Context::context_func(void *arg) { + swoole_signal_block_all(); Context *_this = (Context *) arg; SwooleTG.reactor = g_reactor; SwooleTG.timer = g_timer;