]> gitweb.factorcode.org Git - factor.git/commitdiff
vm: don't pass this to safepoint constructor
authorJoe Groff <arcata@gmail.com>
Tue, 8 Nov 2011 19:06:00 +0000 (11:06 -0800)
committerJoe Groff <arcata@gmail.com>
Tue, 8 Nov 2011 19:06:00 +0000 (11:06 -0800)
It's bad juju and MSVC calls us out on it.

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

index 47241c70af35fe5ceee68f8d180de46d21e9250c..5f3188abcb14526b88848046025a47c91381891a 100755 (executable)
@@ -89,7 +89,7 @@ void factor_vm::not_implemented_error()
 void factor_vm::memory_protection_error(cell addr)
 {
        if(code->safepoint_p(addr))
-               safepoint.handle_safepoint();
+               safepoint.handle_safepoint(this);
        else if(faulting_p)
                fatal_error("Double fault", 0);
        else if(ctx->datastack_seg->underflow_p(addr))
index d5b4ea90a4582ec3fe14d28388b1e4cbbe667f22..6d6dc6167db7057826e07c1d96438a65f4d8fa4d 100755 (executable)
@@ -202,7 +202,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(vm);
                enqueue_signal(vm, signal);
        }
        else
@@ -213,10 +213,10 @@ void sample_signal_handler(int signal, siginfo_t *siginfo, void *uap)
 {
        factor_vm *vm = current_vm_p();
        if (vm)
-               vm->safepoint.enqueue_samples(1, (cell)UAP_PROGRAM_COUNTER(uap), false);
+               vm->safepoint.enqueue_samples(vm, 1, (cell)UAP_PROGRAM_COUNTER(uap), false);
        else if (thread_vms.size() == 1) {
                factor_vm *the_only_vm = thread_vms.begin()->second;
-               the_only_vm->safepoint.enqueue_samples(1, (cell)UAP_PROGRAM_COUNTER(uap), true);
+               the_only_vm->safepoint.enqueue_samples(vm, 1, (cell)UAP_PROGRAM_COUNTER(uap), true);
        }
 }
 
index 4b4b4e78c3514741d2d800a9421593d95c721b23..97c227e74eab0778c92d85c1d953bf7561c7715a 100755 (executable)
@@ -288,7 +288,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(this);
                return TRUE;
        }
        default:
@@ -348,7 +348,7 @@ void factor_vm::sampler_thread_loop()
                        suscount = ResumeThread(thread);
                        assert(suscount == 1);
 
-                       safepoint.enqueue_samples(samples, context.EIP, false);
+                       safepoint.enqueue_samples(this, samples, context.EIP, false);
                }
        }
 }
index 425b78a4fe82acd52a0e8ef1d8778e06cd5dfba8..83621e477fd1d55fc71a557079502662f66a3cf1 100644 (file)
@@ -3,20 +3,20 @@
 namespace factor
 {
 
-void safepoint_state::enqueue_safepoint() volatile
+void safepoint_state::enqueue_safepoint(factor_vm *parent) volatile
 {
        parent->code->guard_safepoint();
 }
 
-void safepoint_state::enqueue_fep() volatile
+void safepoint_state::enqueue_fep(factor_vm *parent) volatile
 {
        if (parent->fep_p)
                fatal_error("Low-level debugger interrupted", 0);
        atomic::store(&fep_p, true);
-       enqueue_safepoint();
+       enqueue_safepoint(parent);
 }
 
-void safepoint_state::enqueue_samples(cell samples, cell pc, bool foreign_thread_p) volatile
+void safepoint_state::enqueue_samples(factor_vm *parent, cell samples, cell pc, bool foreign_thread_p) volatile
 {
        if (atomic::load(&parent->sampling_profiler_p))
        {
@@ -31,11 +31,11 @@ void safepoint_state::enqueue_samples(cell samples, cell pc, bool foreign_thread
                        if (!parent->code->seg->in_segment_p(pc))
                                atomic::fetch_add(&sample_counts.foreign_sample_count, samples);
                }
-               enqueue_safepoint();
+               enqueue_safepoint(parent);
        }
 }
 
-void safepoint_state::handle_safepoint() volatile
+void safepoint_state::handle_safepoint(factor_vm *parent) volatile
 {
        parent->code->unguard_safepoint();
 
index 8b559f1b9cb5e826bc8fc3e385511d19e585ca93..782de47be70e917c9d46149d076a8eaa183e7b0a 100644 (file)
@@ -3,23 +3,20 @@ namespace factor
 
 struct safepoint_state
 {
-       factor_vm *parent;
-
        cell fep_p;
        profiling_sample_count sample_counts;
 
-       safepoint_state(factor_vm *parent) :
-               parent(parent),
+       safepoint_state() :
                fep_p(false),
                sample_counts()
        {
        }
 
-       void handle_safepoint() volatile;
+       void handle_safepoint(factor_vm *parent) volatile;
 
-       void enqueue_safepoint() volatile;
-       void enqueue_samples(cell samples, cell pc, bool foreign_thread_p) volatile;
-       void enqueue_fep() volatile;
+       void enqueue_safepoint(factor_vm *parent) volatile;
+       void enqueue_samples(factor_vm *parent, cell samples, cell pc, bool foreign_thread_p) volatile;
+       void enqueue_fep(factor_vm *parent) volatile;
 };
 
 }
index 16005a9735b9bc9c2a3e272afac49f824b2c4fca..d2298c289ad9c692bc988786d1d8b3ba91fc8a29 100755 (executable)
--- a/vm/vm.cpp
+++ b/vm/vm.cpp
@@ -24,7 +24,7 @@ factor_vm::factor_vm(THREADHANDLE thread) :
        last_nano_count(0),
        signal_callstack_seg(NULL),
        faulting_p(false),
-       safepoint(this)
+       safepoint()
 {
        primitive_reset_dispatch_stats();
 }