From dee267ba10527f831b00c01e46863baae5c9767e Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Thu, 3 Nov 2022 22:38:34 -0500 Subject: [PATCH] added alloc/atomic; network bugfixes; iter bugfix --- core/alloc/atomic.onyx | 31 ++++++++ core/container/iter.onyx | 13 +++- core/net/net.onyx | 17 +++- core/net/tcp.onyx | 91 +++++++++++++++------- core/onyx/fault_handling.onyx | 33 ++++++++ core/std.onyx | 1 + interpreter/build.sh | 2 +- interpreter/src/debug/debug_thread.c | 2 + interpreter/src/vm/vm.c | 4 +- runtime/onyx_runtime.c | 2 + runtime/src/ort_net.h | 16 ++++ runtime/src/ort_os.h | 57 ++++++++++++++ runtime/src/ort_threads.h | 3 +- shared/lib/linux_x86_64/lib/libovmwasm.so | Bin 248128 -> 248128 bytes 14 files changed, 235 insertions(+), 37 deletions(-) create mode 100644 core/alloc/atomic.onyx create mode 100644 core/onyx/fault_handling.onyx diff --git a/core/alloc/atomic.onyx b/core/alloc/atomic.onyx new file mode 100644 index 00000000..3272d3fa --- /dev/null +++ b/core/alloc/atomic.onyx @@ -0,0 +1,31 @@ +package core.alloc.atomic + +use core {sync} + +AtomicAllocator :: struct { + a: Allocator; + m: sync.Mutex; +} + +make :: (a: Allocator) -> AtomicAllocator { + atomic: AtomicAllocator = .{ a = a }; + + sync.mutex_init(^atomic.m); + + return atomic; +} + +make_allocator :: (atomic: ^AtomicAllocator) => + Allocator.{ atomic, atomic_alloc }; + +#overload +core.alloc.as_allocator :: make_allocator + + +#local +atomic_alloc :: (atomic: ^AtomicAllocator, aa: AllocationAction, size: u32, align: u32, oldptr: rawptr) -> rawptr { + sync.scoped_mutex(^atomic.m); + return atomic.a.func(atomic.a.data, aa, size, align, oldptr); +} + + diff --git a/core/container/iter.onyx b/core/container/iter.onyx index dc6a463c..b9684fbd 100644 --- a/core/container/iter.onyx +++ b/core/container/iter.onyx @@ -33,7 +33,7 @@ ImplicitIterator :: interface (t: $T) { #overload #precedence 10000 as_iterator :: (x: ^$T/ImplicitIterator) => { x->iter_open(); - return generator(x, T.iter_next, T.iter_close); + return generator_no_copy(x, T.iter_next, T.iter_close); } @@ -728,6 +728,17 @@ generator :: (ctx: ^$Ctx, gen: (^Ctx) -> ($T, bool), close: (^Ctx) -> void) -> I }; } +generator_no_copy :: #match #local {} + +#overload +generator_no_copy :: (ctx: ^$Ctx, gen: (^Ctx) -> ($T, bool)) => + Iterator(T).{ ctx, gen } + +#overload +generator_no_copy :: (ctx: ^$Ctx, gen: (^Ctx) -> ($T, bool), close: (^Ctx) -> void) => + Iterator(T).{ ctx, gen, close } + + #if runtime.Multi_Threading_Enabled { #local sync :: core.sync diff --git a/core/net/net.onyx b/core/net/net.onyx index 7a84b0f0..c27f0175 100644 --- a/core/net/net.onyx +++ b/core/net/net.onyx @@ -21,6 +21,7 @@ Socket :: struct { listen :: socket_listen accept :: socket_accept connect :: socket_connect + shutdown :: socket_shutdown send :: socket_send sendto :: socket_sendto sendall :: socket_sendall @@ -48,8 +49,15 @@ SocketType :: enum { } SocketSetting :: enum { - NonBlocking :: 0x01; - Broadcast :: 0x02; + NonBlocking :: 0x01; + Broadcast :: 0x02; + ReuseAddress :: 0x03; +} + +SocketShutdown :: enum { + Read :: 0; + Write :: 1; + ReadWrite :: 2; } #local UNIX_SOCKET_PATH_LEN :: 256 @@ -133,6 +141,10 @@ socket_listen :: (s: ^Socket, backlog := 32) { __net_listen(s.handle, backlog); } +socket_shutdown :: (s: ^Socket, how: SocketShutdown) { + __net_shutdown(s.handle, cast(u32) how); +} + socket_accept :: (s: ^Socket) -> (Socket, Socket_Address) { new_socket: Socket; new_addr: Socket_Address; @@ -271,6 +283,7 @@ network_to_host :: #match {} #package __net_accept :: (handle: Socket.Handle, out_address: ^Socket_Address) -> Socket.Handle --- #package __net_connect_unix :: (handle: Socket.Handle, path: str) -> SocketError --- #package __net_connect_ipv4 :: (handle: Socket.Handle, host: str, port: u16) -> SocketError --- + #package __net_shutdown :: (handle: Socket.Handle, how: u32) -> void --- #package __net_send :: (handle: Socket.Handle, data: [] u8) -> i32 --- #package __net_sendto :: (handle: Socket.Handle, data: [] u8, addr: ^Socket_Address) -> i32 --- #package __net_recv :: (handle: Socket.Handle, data: [] u8, async_would_block: ^bool) -> i32 --- diff --git a/core/net/tcp.onyx b/core/net/tcp.onyx index 8885b5a8..65bad059 100644 --- a/core/net/tcp.onyx +++ b/core/net/tcp.onyx @@ -14,6 +14,8 @@ TCP_Connection :: struct { event_allocator: Allocator; events: [..] TCP_Event; event_cursor := 0; + + event_mutex: sync.Mutex; } TCP_Event :: struct { @@ -57,32 +59,32 @@ TCP_Event :: struct { } } -tcp_get_events :: (use conn: ^TCP_Connection) => { - conn.event_cursor = 0; - - return iter.generator( - conn, +// Iterator implementation for TCP_Connection +#inject TCP_Connection { + iter_open :: (use conn: ^TCP_Connection) { + conn.event_cursor = 0; + } - (use conn: ^TCP_Connection) -> (TCP_Event, bool) { - if event_cursor == events.count do return .{}, false; + iter_next :: (use conn: ^TCP_Connection) -> (TCP_Event, bool) { + if event_cursor == events.count do return .{}, false; - defer event_cursor += 1; - return events[event_cursor], true; - }, + defer event_cursor += 1; + return events[event_cursor], true; + } - (use conn: ^TCP_Connection) { - for events { - switch it.kind { - case .Data { - raw_free(event_allocator, (cast(^TCP_Event.Data) it.data).contents.data); - } + iter_close :: (use conn: ^TCP_Connection) { + for events { + switch it.kind { + case .Data { + raw_free(event_allocator, (cast(^TCP_Event.Data) it.data).contents.data); } - - raw_free(event_allocator, it.data); } - array.clear(^events); - }); + raw_free(event_allocator, it.data); + } + + array.clear(^events); + } } @@ -106,8 +108,8 @@ TCP_Server :: struct { emit_data_events := true; - get_events :: tcp_get_events listen :: tcp_server_listen + stop :: tcp_server_stop pulse :: tcp_server_pulse send :: tcp_server_send broadcast :: tcp_server_broadcast @@ -151,17 +153,22 @@ tcp_server_make :: (max_clients := 32, allocator := context.allocator) -> ^TCP_S server.clients = make([] ^TCP_Server.Client, max_clients, allocator=allocator); array.fill(server.clients, null); + sync.mutex_init(^server.event_mutex); + return server; } #local tcp_server_listener :: (use server: ^TCP_Server) { while server.alive { if server.client_count == server.clients.count { - os.sleep(100); + os.sleep(1); continue; } client_socket, client_addr := socket->accept(); + if !client_socket.vtable { + continue; + } client := new(TCP_Server.Client, allocator=client_allocator); client.state = .Alive; @@ -174,7 +181,10 @@ tcp_server_make :: (max_clients := 32, allocator := context.allocator) -> ^TCP_S conn_event := new(TCP_Event.Connection, allocator=server.event_allocator); conn_event.address = ^client.address; conn_event.client = client; - server.events << .{ .Connection, conn_event }; // @Threading // This operation should be protected by a mutex? + + sync.critical_section(^server.event_mutex) { + server.events << .{ .Connection, conn_event }; // @Threading + } } } @@ -188,10 +198,24 @@ tcp_server_listen :: (use server: ^TCP_Server, port: u16) -> bool { return true; } +tcp_server_stop :: (use server: ^TCP_Server) { + server.alive = false; + + for clients { + if !it do continue; + + if it.state == .Alive do server->kill_client(it); + } + + server.socket->close(); + thread.kill(^listener_thread); +} + tcp_server_pulse :: (use server: ^TCP_Server) -> bool { for^ clients { client := *it; - if client == null do continue; + if !client do continue; + switch client.state { case .Being_Killed { // Before, there was not a "being killed" state and the code made @@ -247,14 +271,18 @@ tcp_server_pulse :: (use server: ^TCP_Server) -> bool { data_event.client = it; data_event.address = ^it.address; data_event.contents = memory.copy_slice(msg_buffer[0 .. bytes_read], allocator=server.event_allocator); - server.events << .{ .Data, data_event }; // @Threading // See comment above. + sync.critical_section(^server.event_mutex) { + server.events << .{ .Data, data_event }; // @Threading // See comment above. + } } elseif !it.recv_ready_event_present { it.recv_ready_event_present = true; ready_event := new(TCP_Event.Ready, allocator=server.event_allocator); ready_event.client = it; ready_event.address = ^it.address; - server.events << .{ .Ready, ready_event }; // @Threading // See comment above. + sync.critical_section(^server.event_mutex) { + server.events << .{ .Ready, ready_event }; // @Threading // See comment above. + } } } @@ -264,7 +292,9 @@ tcp_server_pulse :: (use server: ^TCP_Server) -> bool { disconnect_event := new(TCP_Event.Disconnection, allocator=server.event_allocator); disconnect_event.client = it; disconnect_event.address = ^it.address; - server.events << .{ .Disconnection, disconnect_event }; // @Threading // See comment above. + sync.critical_section(^server.event_mutex) { + server.events << .{ .Disconnection, disconnect_event }; // @Threading // See comment above. + } } } @@ -298,12 +328,15 @@ tcp_server_broadcast :: (use server: ^TCP_Server, data: [] u8, except: ^TCP_Serv tcp_server_handle_events :: macro (server: ^TCP_Server, handler: Code) { while server->pulse() { - for server->get_events() do switch it.kind do #unquote handler; + for iter.as_iterator(^server.connection) { + switch it.kind do #unquote handler; + } } } tcp_server_kill_client :: (use server: ^TCP_Server, client: ^TCP_Server.Client) { client.state = .Being_Killed; + client.socket->shutdown(.ReadWrite); client.socket->close(); client.socket.vtable = null; } @@ -316,8 +349,6 @@ tcp_server_kill_client :: (use server: ^TCP_Server, client: ^TCP_Server.Client) TCP_Client :: struct { use connection: TCP_Connection; - - get_events :: tcp_get_events } diff --git a/core/onyx/fault_handling.onyx b/core/onyx/fault_handling.onyx new file mode 100644 index 00000000..10e1454b --- /dev/null +++ b/core/onyx/fault_handling.onyx @@ -0,0 +1,33 @@ +package core.os + +Fault_Handler :: struct { + handle: (rawptr) -> void; + ctx: rawptr; +} + +register_fault_handler :: (ctx: rawptr, handle: (rawptr) -> void) { + fault_handlers << .{ handle, ctx }; + + if !global_fault_handle_registered { + assert(__register_cleanup(#export_name global_fault_handler), "Failed to register global fault handler"); + global_fault_handle_registered = true; + } +} + +#local { + #foreign "onyx_runtime" { + __register_cleanup :: (name: str) -> bool --- + } + + global_fault_handler :: () { + for fault_handlers { + it.handle(it.ctx); + } + } + + fault_handlers: [..] Fault_Handler + global_fault_handle_registered := false; +} + + + diff --git a/core/std.onyx b/core/std.onyx index 669887c5..4cdfa5fe 100644 --- a/core/std.onyx +++ b/core/std.onyx @@ -65,6 +65,7 @@ package core #load "./onyx/fs" #load "./onyx/cptr" #load "./onyx/cbindgen" + #load "./onyx/fault_handling" } #if runtime.runtime == .Wasi { #load "./wasi/wasi" diff --git a/interpreter/build.sh b/interpreter/build.sh index adbb53ce..778c7307 100755 --- a/interpreter/build.sh +++ b/interpreter/build.sh @@ -2,7 +2,7 @@ . ../settings.sh -# FLAGS="-g3" +# FLAGS="-g3 -DOVM_DEBUG=1" # FLAGS="-g3 -DOVM_VERBOSE=1" FLAGS="-Ofast" LIBS="-pthread" diff --git a/interpreter/src/debug/debug_thread.c b/interpreter/src/debug/debug_thread.c index d8e2dcef..b87843b9 100644 --- a/interpreter/src/debug/debug_thread.c +++ b/interpreter/src/debug/debug_thread.c @@ -202,6 +202,8 @@ static void process_command(debug_state_t *debug, struct msg_parse_ctx_t *ctx) { break; brk_send_error: + printf("[WARN ] Failed to set breakpoint at %s:%d (%x)\n", filename, line, instr); + send_response_header(debug, msg_id); send_bool(debug, false); send_int(debug, -1); diff --git a/interpreter/src/vm/vm.c b/interpreter/src/vm/vm.c index 46f2f9bd..adb2247d 100644 --- a/interpreter/src/vm/vm.c +++ b/interpreter/src/vm/vm.c @@ -1246,8 +1246,6 @@ ovm_value_t ovm_run_code(ovm_engine_t *engine, ovm_state_t *state, ovm_program_t #undef CMPXCHG case OVMI_BREAK: - printf("onyx: exiting early due to reaching an unreachable instruction.\n"); - if (state->debug) { state->debug->state = debug_state_pausing; state->debug->pause_reason = debug_pause_exception; @@ -1256,6 +1254,8 @@ ovm_value_t ovm_run_code(ovm_engine_t *engine, ovm_state_t *state, ovm_program_t sem_wait(&state->debug->wait_semaphore); } + printf("onyx: exiting early due to reaching an unreachable instruction.\n"); + return ((ovm_value_t) {0}); default: diff --git a/runtime/onyx_runtime.c b/runtime/onyx_runtime.c index c8bbacaf..f7eebfca 100644 --- a/runtime/onyx_runtime.c +++ b/runtime/onyx_runtime.c @@ -70,6 +70,7 @@ ONYX_LIBRARY { ONYX_FUNC(__exit) ONYX_FUNC(__sleep) ONYX_FUNC(__time) + ONYX_FUNC(__register_cleanup) ONYX_FUNC(__time_localtime) ONYX_FUNC(__time_gmtime) @@ -83,6 +84,7 @@ ONYX_LIBRARY { ONYX_FUNC(__net_accept) ONYX_FUNC(__net_connect_unix) ONYX_FUNC(__net_connect_ipv4) + ONYX_FUNC(__net_shutdown) ONYX_FUNC(__net_send) ONYX_FUNC(__net_sendto) ONYX_FUNC(__net_recv) diff --git a/runtime/src/ort_net.h b/runtime/src/ort_net.h index 9b2e4c5d..c021b1c4 100644 --- a/runtime/src/ort_net.h +++ b/runtime/src/ort_net.h @@ -90,6 +90,12 @@ ONYX_DEF(__net_setting, (WASM_I32, WASM_I32, WASM_I32), ()) { setsockopt(s, SOL_SOCKET, SO_BROADCAST, (void *) ¶ms->data[2].of.i32, sizeof(int)); break; } + + case 3: { // :EnumDependent Reuse-Address + int s = params->data[0].of.i32; + setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void *) ¶ms->data[2].of.i32, sizeof(int)); + break; + } } #endif @@ -234,6 +240,16 @@ ONYX_DEF(__net_connect_ipv4, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), (WASM_I32 #endif } +ONYX_DEF(__net_shutdown, (WASM_I32, WASM_I32), ()) { + #ifdef _BH_LINUX + shutdown(params->data[0].of.i32, params->data[1].of.i32); + return NULL; + #endif + + #ifdef _BH_WINDOWS + #endif +} + ONYX_DEF(__net_send, (WASM_I32, WASM_I32, WASM_I32), (WASM_I32)) { #ifdef _BH_LINUX // TODO: The flags at the end should be controllable. diff --git a/runtime/src/ort_os.h b/runtime/src/ort_os.h index 05fbf652..860784a0 100644 --- a/runtime/src/ort_os.h +++ b/runtime/src/ort_os.h @@ -53,3 +53,60 @@ ONYX_DEF(__time, (), (WASM_I64)) { return NULL; } + + + + + +#ifdef _BH_LINUX +static wasm_func_t *wasm_cleanup_func; + +static void unix_signal_handler(int signo, siginfo_t *info, void *context) { + wasm_val_vec_t args = WASM_EMPTY_VEC; + wasm_val_vec_t results = WASM_EMPTY_VEC; + runtime->wasm_func_call(wasm_cleanup_func, &args, &results); +} +#endif + +ONYX_DEF(__register_cleanup, (WASM_I32, WASM_I32), (WASM_I32)) { + #ifdef _BH_LINUX + + int len = (127 < params->data[1].of.i32 ? 127 : params->data[1].of.i32); + char name[128]; + memcpy(name, ONYX_PTR(params->data[0].of.i32), len); + name[len] = '\0'; + + wasm_extern_t *signal_extern = runtime->wasm_extern_lookup_by_name( + runtime->wasm_module, + runtime->wasm_instance, + name); + + wasm_cleanup_func = runtime->wasm_extern_as_func(signal_extern); + if (!wasm_cleanup_func) { + results->data[0] = WASM_I32_VAL(0); + return NULL; + } + + // This is probably not the most complete list, but seems + // sufficient for now. + if ( + (signal(SIGSEGV, &unix_signal_handler) == SIG_ERR) || + (signal(SIGQUIT, &unix_signal_handler) == SIG_ERR) || + (signal(SIGINT, &unix_signal_handler) == SIG_ERR) || + (signal(SIGPIPE, &unix_signal_handler) == SIG_ERR) || + (signal(SIGTERM, &unix_signal_handler) == SIG_ERR) || + (signal(SIGHUP, &unix_signal_handler) == SIG_ERR) || + (signal(SIGFPE, &unix_signal_handler) == SIG_ERR)) + { + results->data[0] = WASM_I32_VAL(0); + return NULL; + } + + results->data[0] = WASM_I32_VAL(1); + return NULL; + #endif + + #ifdef _BH_WINDOWS + #endif +} + diff --git a/runtime/src/ort_threads.h b/runtime/src/ort_threads.h index 75cf4710..0893131f 100644 --- a/runtime/src/ort_threads.h +++ b/runtime/src/ort_threads.h @@ -105,7 +105,8 @@ ONYX_DEF(__kill_thread, (WASM_I32), (WASM_I32)) { #ifdef _BH_LINUX // This leads to some weirdness and bugs... // - pthread_kill(thread->thread, SIGKILL); + // pthread_kill(thread->thread, SIGKILL); + pthread_cancel(thread->thread); #endif #ifdef _BH_WINDOWS diff --git a/shared/lib/linux_x86_64/lib/libovmwasm.so b/shared/lib/linux_x86_64/lib/libovmwasm.so index 6319498f846a1ad98771deebf4a2847b5d969fa3..7d1249f7f18bd9cf784f01790378bfacf774d914 100755 GIT binary patch delta 50386 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 delta 50271 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