]> gitweb.factorcode.org Git - factor.git/commitdiff
vm: enqueue signals for FEP signals too
authorJoe Groff <arcata@gmail.com>
Mon, 7 Nov 2011 22:05:31 +0000 (14:05 -0800)
committerJoe Groff <arcata@gmail.com>
Tue, 8 Nov 2011 16:42:47 +0000 (08:42 -0800)
Although SIGINT still can't interrupt the current Factor thread in a sane way, this will at least wake up the run loop when waiting for input and fix #348 when implemented at the application level.

vm/os-unix.cpp
vm/os-windows.cpp
vm/safepoints.cpp
vm/safepoints.hpp

index 6e7ba3418039f3bcb10d738b86aa5cbde5b3c4b8..d76d92fa16b12246688d1e0596a65e51a1270fec 100755 (executable)
@@ -193,7 +193,7 @@ void fep_signal_handler(int signal, siginfo_t *siginfo, void *uap)
 {
        factor_vm *vm = current_vm_p();
        if (vm)
-               vm->safepoint.enqueue_fep();
+               vm->safepoint.enqueue_fep(signal);
        else
                fatal_error("Foreign thread received signal", signal);
 }
index d949d2fb55eaa85f11104dc37611d193a6efff6c..c2be26c42258452af781b60c1371756b3254a6dc 100755 (executable)
@@ -289,7 +289,7 @@ static BOOL WINAPI ctrl_handler(DWORD dwCtrlType)
                threads. */
                assert(thread_vms.size() == 1);
                factor_vm *vm = thread_vms.begin()->second;
-               vm->safepoint.enqueue_fep();
+               vm->safepoint.enqueue_fep(0);
                return TRUE;
        }
        default:
index 55a76c685287ae2d3c5b2e9731809ee131a36319..bec10898edfab7f2123a75721c8d232014da8ec2 100644 (file)
@@ -8,11 +8,13 @@ void safepoint_state::enqueue_safepoint() volatile
        parent->code->guard_safepoint();
 }
 
-void safepoint_state::enqueue_fep() volatile
+void safepoint_state::enqueue_fep(cell signal) volatile
 {
        if (parent->fep_p)
                fatal_error("Low-level debugger interrupted", 0);
        atomic::store(&fep_p, true);
+       if (signal != 0)
+               atomic::store(&queued_signal, signal);
        enqueue_safepoint();
 }
 
index a97ad8499f2bca86687e0a414feae7201a8a8820..4acef6ab20e41e190a4b87db278d04da11a633ce 100644 (file)
@@ -21,7 +21,7 @@ struct safepoint_state
 
        void enqueue_safepoint() volatile;
        void enqueue_samples(cell samples, cell pc, bool foreign_thread_p) volatile;
-       void enqueue_fep() volatile;
+       void enqueue_fep(cell signal) volatile;
 
        // os-*.cpp
        void enqueue_signal(cell signal) volatile;