Merge phpdbg into PHP-5.6
authorBob Weinand <bobwei9@hotmail.com>
Mon, 27 Oct 2014 12:11:13 +0000 (13:11 +0100)
committerBob Weinand <bobwei9@hotmail.com>
Mon, 27 Oct 2014 12:11:13 +0000 (13:11 +0100)
Conflicts:
sapi/phpdbg/phpdbg.c
sapi/phpdbg/phpdbg_prompt.c

phpdbg.c
phpdbg.h
phpdbg_prompt.c
phpdbg_sigio_win32.c
phpdbg_sigio_win32.h

index b7fb5e5afc43cd01e38303ee0684c71dc0dd23a1..9c56b1d7bc9ddea099844a3cfef6902f9bf04dc0 100644 (file)
--- a/phpdbg.c
+++ b/phpdbg.c
@@ -1343,7 +1343,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);
@@ -1466,7 +1466,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;
index 65bdcd0d6f3ef83b69e3fcc5028b0d8d506bbb30..2aae533d845f76ee32744a07a5a1429b053c3063 100644 (file)
--- a/phpdbg.h
+++ b/phpdbg.h
 # 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 
index 5e2cc03d5020b1d70afbf10a0ceca36115bc6563..73ecbcb892c8d96f7a8d7e3d7529e202675f451c 100644 (file)
@@ -653,6 +653,10 @@ PHPDBG_COMMAND(run) /* {{{ */
                        EG(opline_ptr) = orig_opline;
                        EG(return_value_ptr_ptr) = orig_retval_ptr;
 
+                       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;
@@ -1143,6 +1147,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();
        }
 
@@ -1438,7 +1443,7 @@ void phpdbg_execute_ex(zend_op_array *op_array TSRMLS_DC) /* {{{ */
        }
 #endif
 
-       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();
        }
 
index 24e9ac0e0aacdceacd0b9577ca1e99c2f59dc880..158e034872be353325e250d6454cadd53a48c5f8 100644 (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;
 }
 
index 796b477f936a9e4a959fa042626dfafe0366601a..8c8a381d64bd773cbe6261065e99fb80c2651b0a 100644 (file)
 #include "phpdbg_io.h"
 
 struct win32_sigio_watcher_data {
-       zend_ulong flags;
 #ifdef ZTS
        void ***tsrm_ls;
 #endif
        int fd;
-       zend_uchar running;
 };
 
 void