diff --git a/vm/factor.hpp b/vm/factor.hpp index 8f2ff6295d..5c60258a01 100644 --- a/vm/factor.hpp +++ b/vm/factor.hpp @@ -4,4 +4,13 @@ VM_C_API void init_globals(); factor_vm* new_factor_vm(); VM_C_API void start_standalone_factor(int argc, vm_char** argv); +// os-* +void open_console(); +void close_console(); +void lock_console(); +void unlock_console(); + +void ignore_ctrl_c(); +void handle_ctrl_c(); + } diff --git a/vm/os-unix.cpp b/vm/os-unix.cpp index 04f38dba3a..206f1827bf 100644 --- a/vm/os-unix.cpp +++ b/vm/os-unix.cpp @@ -455,7 +455,7 @@ void* stdin_loop(void* arg) { return NULL; } -void factor_vm::open_console() { +void open_console() { FACTOR_ASSERT(!stdin_thread_initialized_p); safe_pipe(&control_read, &control_write); safe_pipe(&size_read, &size_write); @@ -468,14 +468,14 @@ void factor_vm::open_console() { /* This method is used to kill the stdin_loop before exiting from factor. A Nvidia driver bug on Linux is the reason this has to be done, see: http://www.nvnews.net/vbulletin/showthread.php?t=164619 */ -void factor_vm::close_console() { +void close_console() { if (stdin_thread_initialized_p) { pthread_cancel(stdin_thread); pthread_join(stdin_thread, 0); } } -void factor_vm::lock_console() { +void lock_console() { FACTOR_ASSERT(stdin_thread_initialized_p); /* Lock the stdin_mutex and send the stdin_loop thread a signal to interrupt any read() it has in progress. When the stdin loop iterates again, it will @@ -484,19 +484,19 @@ void factor_vm::lock_console() { pthread_kill(stdin_thread, SIGUSR2); } -void factor_vm::unlock_console() { +void unlock_console() { FACTOR_ASSERT(stdin_thread_initialized_p); pthread_mutex_unlock(&stdin_mutex); } -void factor_vm::ignore_ctrl_c() { +void ignore_ctrl_c() { sig_t ret; do { ret = signal(SIGINT, SIG_DFL); } while (ret == SIG_ERR && errno == EINTR); } -void factor_vm::handle_ctrl_c() { +void handle_ctrl_c() { struct sigaction fep_sigaction; init_sigaction_with_handler(&fep_sigaction, fep_signal_handler); sigaction_safe(SIGINT, &fep_sigaction, NULL); @@ -508,7 +508,7 @@ void abort() { ret = signal(SIGABRT, SIG_DFL); } while (ret == SIG_ERR && errno == EINTR); - factor_vm::close_console(); + close_console(); ::abort(); } diff --git a/vm/os-windows.cpp b/vm/os-windows.cpp index 9ac6772132..214b48ca29 100644 --- a/vm/os-windows.cpp +++ b/vm/os-windows.cpp @@ -295,21 +295,21 @@ static BOOL WINAPI ctrl_handler(DWORD dwCtrlType) { } } -void factor_vm::open_console() { handle_ctrl_c(); } +void open_console() { handle_ctrl_c(); } -void factor_vm::ignore_ctrl_c() { +void ignore_ctrl_c() { SetConsoleCtrlHandler(factor::ctrl_handler, FALSE); } -void factor_vm::handle_ctrl_c() { +void handle_ctrl_c() { SetConsoleCtrlHandler(factor::ctrl_handler, TRUE); } -void factor_vm::lock_console() {} +void lock_console() {} -void factor_vm::unlock_console() {} +void unlock_console() {} -void factor_vm::close_console() {} +void close_console() {} void factor_vm::sampler_thread_loop() { LARGE_INTEGER counter, new_counter, units_per_second; diff --git a/vm/run.cpp b/vm/run.cpp index 22dd77f5a8..7d9ead8a72 100644 --- a/vm/run.cpp +++ b/vm/run.cpp @@ -5,7 +5,7 @@ namespace factor { void factor_vm::primitive_exit() { exit((int)to_fixnum(ctx->pop())); } void exit(int status) { - factor_vm::close_console(); + close_console(); ::exit(status); } diff --git a/vm/vm.hpp b/vm/vm.hpp index 06fafa0cfc..c37638a7fc 100644 --- a/vm/vm.hpp +++ b/vm/vm.hpp @@ -737,12 +737,6 @@ struct factor_vm { void init_signals(); void start_sampling_profiler_timer(); void end_sampling_profiler_timer(); - static void open_console(); - static void close_console(); - static void lock_console(); - static void unlock_console(); - static void ignore_ctrl_c(); - static void handle_ctrl_c(); // os-windows #if defined(WINDOWS)