]> gitweb.factorcode.org Git - factor.git/commitdiff
vm: fatal_error if VM-less thread gets a signal
authorJoe Groff <arcata@gmail.com>
Thu, 20 Oct 2011 05:47:14 +0000 (22:47 -0700)
committerJoe Groff <arcata@gmail.com>
Fri, 28 Oct 2011 04:14:48 +0000 (21:14 -0700)
vm/errors.cpp
vm/os-unix.cpp
vm/vm.hpp

index 7869b79b582a01259c01acd906adc744013e0047..f0df0acbb8826edb93cbccbb4d51fb4ed46765a5 100755 (executable)
@@ -142,9 +142,7 @@ void factor_vm::synchronous_signal_handler_impl()
 
 void synchronous_signal_handler_impl()
 {
-       factor_vm *vm = current_vm_p();
-       if (vm)
-               vm->synchronous_signal_handler_impl();
+       current_vm()->synchronous_signal_handler_impl();
 }
 
 void factor_vm::fp_signal_handler_impl()
index 90ce67e0d0978dfa1b4f6a7f1f8046032e7aa376..a198f10a1ecd5b16aac1ab2c886f5ddd67df5c87 100755 (executable)
@@ -153,9 +153,13 @@ void memory_signal_handler(int signal, siginfo_t *siginfo, void *uap)
 
 void synchronous_signal_handler(int signal, siginfo_t *siginfo, void *uap)
 {
-       factor_vm *vm = current_vm();
-       vm->signal_number = signal;
-       vm->dispatch_signal(uap,factor::synchronous_signal_handler_impl);
+       factor_vm *vm = current_vm_p();
+       if (vm)
+       {
+               vm->signal_number = signal;
+               vm->dispatch_signal(uap,factor::synchronous_signal_handler_impl);
+       } else
+               fatal_error("Foreign thread received signal ", signal);
 }
 
 void next_safepoint_signal_handler(int signal, siginfo_t *siginfo, void *uap)
@@ -163,6 +167,8 @@ void next_safepoint_signal_handler(int signal, siginfo_t *siginfo, void *uap)
        factor_vm *vm = current_vm_p();
        if (vm)
                vm->enqueue_safepoint_signal(signal);
+       else
+               fatal_error("Foreign thread received signal ", signal);
 }
 
 void ignore_signal_handler(int signal, siginfo_t *siginfo, void *uap)
index ae0d73541dccf4549aae6aca0ac38b478199d266..88633023d5c4e87c672ecbedf873ad35ba3e9681 100755 (executable)
--- a/vm/vm.hpp
+++ b/vm/vm.hpp
@@ -211,7 +211,7 @@ struct factor_vm
                                                        bignum * * quotient, bignum * * remainder, int q_negative_p, int r_negative_p);
        void bignum_divide_unsigned_normalized(bignum * u, bignum * v, bignum * q);
        bignum_digit_type bignum_divide_subtract(bignum_digit_type * v_start, bignum_digit_type * v_end,
-                                                       bignum_digit_type guess, bignum_digit_type * u_start);
+                                                       bignum_digit_type guess, bignum_digit_type * u_start);
        void bignum_divide_unsigned_medium_denominator(bignum * numerator,bignum_digit_type denominator,
                                                        bignum * * quotient, bignum * * remainder,int q_negative_p, int r_negative_p);
        void bignum_destructive_normalization(bignum * source, bignum * target, int shift_left);