Skip to content

Commit ca9cc42

Browse files
committed
php#53: * Fix async_wait_process logic
1 parent 1b0abdb commit ca9cc42

File tree

1 file changed

+10
-21
lines changed

1 file changed

+10
-21
lines changed

ext/standard/proc_open.c

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1599,41 +1599,30 @@ static zend_long async_wait_process(zend_process_t process_h, const zend_ulong t
15991599
}
16001600
#endif
16011601

1602-
zend_async_process_event_t *event = ZEND_ASYNC_NEW_PROCESS_EVENT(process_h);
1603-
if (UNEXPECTED(event == NULL)) {
1604-
return -1;
1605-
}
1606-
16071602
zend_coroutine_t *coroutine = ZEND_ASYNC_CURRENT_COROUTINE;
16081603
if (UNEXPECTED(coroutine == NULL)) {
1609-
ZEND_ASYNC_EVENT_RELEASE(&event->base);
16101604
return -1;
16111605
}
16121606

1613-
zend_async_waker_t *waker = timeout > 0
1614-
? zend_async_waker_new_with_timeout(coroutine, timeout, NULL)
1615-
: zend_async_waker_new(coroutine);
1616-
1617-
if (UNEXPECTED(waker == NULL)) {
1618-
ZEND_ASYNC_EVENT_RELEASE(&event->base);
1607+
if (UNEXPECTED(zend_async_waker_new_with_timeout(coroutine, timeout, NULL) == NULL)) {
16191608
return -1;
16201609
}
16211610

1622-
zend_coroutine_event_callback_t *callback = zend_async_coroutine_callback_new(
1623-
coroutine, zend_async_waker_callback_resolve, 0
1624-
);
1625-
1626-
if (UNEXPECTED(callback == NULL)) {
1627-
zend_async_waker_clean(coroutine);
1628-
ZEND_ASYNC_EVENT_RELEASE(&event->base);
1611+
zend_async_process_event_t *event = ZEND_ASYNC_NEW_PROCESS_EVENT(process_h);
1612+
if (UNEXPECTED(event == NULL)) {
16291613
return -1;
16301614
}
16311615

1632-
zend_async_resume_when(coroutine, &event->base, true, zend_async_waker_callback_resolve, callback);
1616+
zend_async_resume_when(coroutine, &event->base, false, zend_async_waker_callback_resolve, NULL);
16331617

16341618
ZEND_ASYNC_SUSPEND();
16351619

1636-
zend_long exit_code = event->exit_code;
1620+
const zend_long exit_code = event->exit_code;
1621+
ZEND_ASYNC_EVENT_RELEASE(&event->base);
1622+
1623+
if (UNEXPECTED(EG(exception))) {
1624+
return -1;
1625+
}
16371626

16381627
return exit_code;
16391628
}

0 commit comments

Comments
 (0)