1
0
mirror of https://github.com/php/php-src.git synced 2026-04-25 17:08:14 +02:00

improve the current sigio handling on win32

This commit is contained in:
Anatol Belski
2014-10-27 10:08:58 +01:00
parent c1639b3e52
commit 0e7987c61a
3 changed files with 21 additions and 18 deletions
+10 -2
View File
@@ -1211,7 +1211,8 @@ int phpdbg_interactive(zend_bool allow_async_unsafe TSRMLS_DC) /* {{{ */
#ifdef PHP_WIN32
#define PARA ((phpdbg_param_t *)stack.next)->type
if (PHPDBG_G(flags) & PHPDBG_IS_REMOTE && (RUN_PARAM == PARA || EVAL_PARAM == PARA)) {
#define HANDLE_SIGIO (PHPDBG_G(flags) & PHPDBG_IS_REMOTE) && PARA != EMPTY_PARAM
if (HANDLE_SIGIO) {
sigio_watcher_start();
}
#endif
@@ -1228,6 +1229,12 @@ int phpdbg_interactive(zend_bool allow_async_unsafe TSRMLS_DC) /* {{{ */
case PHPDBG_FINISH:
case PHPDBG_UNTIL:
case PHPDBG_NEXT: {
#ifdef PHP_WIN32
if (HANDLE_SIGIO) {
sigio_watcher_stop();
sigio_watcher_start();
}
#endif
phpdbg_activate_err_buf(0 TSRMLS_CC);
phpdbg_free_err_buf(TSRMLS_C);
if (!EG(in_execution) && !(PHPDBG_G(flags) & PHPDBG_IS_QUITTING)) {
@@ -1240,10 +1247,11 @@ int phpdbg_interactive(zend_bool allow_async_unsafe TSRMLS_DC) /* {{{ */
phpdbg_activate_err_buf(0 TSRMLS_CC);
phpdbg_free_err_buf(TSRMLS_C);
#ifdef PHP_WIN32
if (PHPDBG_G(flags) & PHPDBG_IS_REMOTE && (RUN_PARAM == PARA || EVAL_PARAM == PARA)) {
if (HANDLE_SIGIO) {
sigio_watcher_stop();
}
#undef PARA
#undef HANDLE_SIGIO
#endif
}
+11 -14
View File
@@ -33,30 +33,31 @@ SigIoWatcherThread(VOID *p)
struct win32_sigio_watcher_data *swd = (struct win32_sigio_watcher_data *)p;
#ifdef ZTS
void ***tsrm_ls = swd->tsrm_ls;
top:
(void)phpdbg_consume_bytes(swd->fd, &sig, 1, -1, tsrm_ls);
#else
top:
(void)phpdbg_consume_bytes(swd->fd, &sig, 1, -1);
#endif
top:
(void)phpdbg_consume_bytes(swd->fd, &sig, 1, -1 TSRMLS_CC);
if (3 == sig) {
printf("signaled, got %d", sig);
/* XXX completely not sure it is done right here */
if (swd->flags & PHPDBG_IS_INTERACTIVE) {
if (PHPDBG_G(flags) & PHPDBG_IS_INTERACTIVE) {
if (raise(sig)) {
/* just out*/
exit(0);
goto top;
}
}
if (swd->flags & PHPDBG_IS_SIGNALED) {
if (PHPDBG_G(flags) & PHPDBG_IS_SIGNALED) {
phpdbg_set_sigsafe_mem(&sig TSRMLS_CC);
zend_try {
phpdbg_force_interruption(TSRMLS_C);
} zend_end_try();
phpdbg_clear_sigsafe_mem(TSRMLS_C);
goto end;
}
if (!(PHPDBG_G(flags) & PHPDBG_IS_INTERACTIVE)) {
PHPDBG_G(flags) |= PHPDBG_IS_SIGNALED;
}
end:
/* XXX set signaled flag to the caller thread, question is - whether it's needed */
ExitThread(sig);
} else {
@@ -74,8 +75,6 @@ sigio_watcher_start(void)
TSRMLS_FETCH();
PHPDBG_G(swd).fd = PHPDBG_G(io)[PHPDBG_STDIN].fd;
PHPDBG_G(swd).running = 1;
PHPDBG_G(swd).flags = PHPDBG_G(flags);
#ifdef ZTS
PHPDBG_G(swd).tsrm_ls = tsrm_ls;
#endif
@@ -113,8 +112,6 @@ sigio_watcher_stop(void)
}
PHPDBG_G(swd).fd = -1;
PHPDBG_G(swd).running = 0;
PHPDBG_G(swd).flags = 0;
PHPDBG_G(sigio_watcher_thread) = INVALID_HANDLE_VALUE;
}
-2
View File
@@ -25,12 +25,10 @@
#include "phpdbg_io.h"
struct win32_sigio_watcher_data {
zend_ulong flags;
#ifdef ZTS
void ***tsrm_ls;
#endif
int fd;
zend_uchar running;
};
void