Fix timer leak (#13027)

ts_resource() and php_request_startup() both eventually call zend_max_execution_timer_init(), which didn't have a guard to prevent recreating timers, thus resulting in leaking timers. This adds a guard to prevent the leak.
This commit is contained in:
Rob Landers 2024-01-05 19:36:19 +01:00 committed by GitHub
parent 2575e6b88c
commit 6342f735b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -35,6 +35,12 @@
ZEND_API void zend_max_execution_timer_init(void) /* {{{ */
{
pid_t pid = getpid();
if (EG(pid) == pid) {
return;
}
struct sigevent sev;
sev.sigev_notify = SIGEV_THREAD_ID;
sev.sigev_value.sival_ptr = &EG(max_execution_timer_timer);
@ -48,9 +54,9 @@ ZEND_API void zend_max_execution_timer_init(void) /* {{{ */
EG(pid) = getpid();
# ifdef MAX_EXECUTION_TIMERS_DEBUG
# ifdef MAX_EXECUTION_TIMERS_DEBUG
fprintf(stderr, "Timer %#jx created on thread %d\n", (uintmax_t) EG(max_execution_timer_timer), sev.sigev_notify_thread_id);
# endif
# endif
sigaction(sev.sigev_signo, NULL, &EG(oldact));
}