summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sapi/phpdbg/phpdbg.c4
-rw-r--r--sapi/phpdbg/phpdbg.h9
-rw-r--r--sapi/phpdbg/phpdbg_prompt.c7
-rw-r--r--sapi/phpdbg/phpdbg_sigio_win32.c25
-rw-r--r--sapi/phpdbg/phpdbg_sigio_win32.h2
5 files changed, 25 insertions, 22 deletions
diff --git a/sapi/phpdbg/phpdbg.c b/sapi/phpdbg/phpdbg.c
index 299216fcff..43881a370f 100644
--- a/sapi/phpdbg/phpdbg.c
+++ b/sapi/phpdbg/phpdbg.c
@@ -1325,7 +1325,7 @@ phpdbg_main:
}
/* setup remote server if necessary */
- if (!cleaning && listen > 0) {
+ if (cleaning <= 0 && listen > 0) {
server = phpdbg_open_socket(address, listen TSRMLS_CC);
if (-1 > server || phpdbg_remote_init(address, listen, server, &socket, &stream TSRMLS_CC) == FAILURE) {
exit(0);
@@ -1455,7 +1455,7 @@ phpdbg_main:
if (exec) { /* set execution context */
PHPDBG_G(exec) = phpdbg_resolve_path(exec TSRMLS_CC);
- PHPDBG_G(exec_len) = strlen(PHPDBG_G(exec));
+ PHPDBG_G(exec_len) = strlen(exec);
free(exec);
exec = NULL;
diff --git a/sapi/phpdbg/phpdbg.h b/sapi/phpdbg/phpdbg.h
index 60bc31a405..64b6aab3ef 100644
--- a/sapi/phpdbg/phpdbg.h
+++ b/sapi/phpdbg/phpdbg.h
@@ -29,8 +29,12 @@
# define PHPDBG_API
#endif
-#include <stdint.h>
-#include <stddef.h>
+#ifndef PHP_WIN32
+# include <stdint.h>
+# include <stddef.h>
+#else
+# include "win32/php_stdint.h"
+#endif
#include "php.h"
#include "php_globals.h"
#include "php_variables.h"
@@ -50,7 +54,6 @@
#if defined(_WIN32) && !defined(__MINGW32__)
# include <windows.h>
# include "config.w32.h"
-# include "win32/php_stdint.h"
# undef strcasecmp
# undef strncasecmp
# define strcasecmp _stricmp
diff --git a/sapi/phpdbg/phpdbg_prompt.c b/sapi/phpdbg/phpdbg_prompt.c
index 7ce0cea363..16807c6402 100644
--- a/sapi/phpdbg/phpdbg_prompt.c
+++ b/sapi/phpdbg/phpdbg_prompt.c
@@ -615,6 +615,10 @@ PHPDBG_COMMAND(run) /* {{{ */
} zend_catch {
PHPDBG_G(in_execution) = 0;
+ if (PHPDBG_G(flags) & PHPDBG_IS_QUITTING) {
+ zend_bailout();
+ }
+
if (!(PHPDBG_G(flags) & PHPDBG_IS_STOPPING)) {
phpdbg_error("stop", "type=\"bailout\"", "Caught exit/error from VM");
restore = 0;
@@ -1092,6 +1096,7 @@ PHPDBG_COMMAND(quit) /* {{{ */
/* don't allow this to loop, ever ... */
if (!(PHPDBG_G(flags) & PHPDBG_IS_STOPPING)) {
PHPDBG_G(flags) |= PHPDBG_IS_QUITTING;
+ PHPDBG_G(flags) &= ~(PHPDBG_IS_RUNNING | PHPDBG_IS_CLEANING);
zend_bailout();
}
@@ -1310,7 +1315,7 @@ void phpdbg_execute_ex(zend_execute_data *execute_data TSRMLS_DC) /* {{{ */
zend_hash_init(&vars, execute_data->func->op_array.last, NULL, NULL, 0);
- if ((PHPDBG_G(flags) & (PHPDBG_IS_STOPPING | PHPDBG_IS_RUNNING)) == PHPDBG_IS_STOPPING) {
+ if ((PHPDBG_G(flags) & PHPDBG_IS_STOPPING) && !(PHPDBG_G(flags) & PHPDBG_IS_RUNNING)) {
zend_bailout();
}
diff --git a/sapi/phpdbg/phpdbg_sigio_win32.c b/sapi/phpdbg/phpdbg_sigio_win32.c
index 24e9ac0e0a..158e034872 100644
--- a/sapi/phpdbg/phpdbg_sigio_win32.c
+++ b/sapi/phpdbg/phpdbg_sigio_win32.c
@@ -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;
}
diff --git a/sapi/phpdbg/phpdbg_sigio_win32.h b/sapi/phpdbg/phpdbg_sigio_win32.h
index 796b477f93..8c8a381d64 100644
--- a/sapi/phpdbg/phpdbg_sigio_win32.h
+++ b/sapi/phpdbg/phpdbg_sigio_win32.h
@@ -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