diff options
author | 2023-07-06 02:22:56 -0300 | |
---|---|---|
committer | 2023-07-05 22:22:56 -0700 | |
commit | 8869bac4117b41196c4a73d9145c0beaf5e8437d (patch) | |
tree | e6e5163801279b7b3ab6e23dd78671983148856b | |
parent | f61d9ef4761444d0550aea90b2656727d41ce1fa (diff) | |
download | bun-8869bac4117b41196c4a73d9145c0beaf5e8437d.tar.gz bun-8869bac4117b41196c4a73d9145c0beaf5e8437d.tar.zst bun-8869bac4117b41196c4a73d9145c0beaf5e8437d.zip |
fix callbacks on release version (#3531)
-rw-r--r-- | src/bun.js/api/bun/socket.zig | 29 | ||||
-rw-r--r-- | src/deps/uws.zig | 29 |
2 files changed, 27 insertions, 31 deletions
diff --git a/src/bun.js/api/bun/socket.zig b/src/bun.js/api/bun/socket.zig index 12a4cffc8..8807d32de 100644 --- a/src/bun.js/api/bun/socket.zig +++ b/src/bun.js/api/bun/socket.zig @@ -1972,7 +1972,11 @@ fn NewSocket(comptime ssl: bool) type { _: *JSC.CallFrame, ) callconv(.C) JSValue { JSC.markBinding(@src()); - this.socket.open(!this.handlers.is_server); + if (comptime ssl) { + if (!this.detached) { + this.socket.open(!this.handlers.is_server); + } + } return JSValue.jsUndefined(); } @@ -2067,12 +2071,9 @@ fn NewSocket(comptime ssl: bool) type { .connection = if (this.connection) |c| c.clone() else null, .wrapped = .tls, .protos = if (protos) |p| (bun.default_allocator.dupe(u8, p[0..protos_len]) catch unreachable) else null, + .server_name = if (socket_config.server_name) |server_name| (bun.default_allocator.dupe(u8, server_name[0..bun.len(server_name)]) catch unreachable) else null, }; - if (socket_config.server_name) |server_name| { - tls.server_name = bun.default_allocator.dupe(u8, server_name[0..bun.len(server_name)]) catch unreachable; - } - var tls_js_value = tls.getThisValue(globalObject); TLSSocket.dataSetCached(tls_js_value, globalObject, default_data); @@ -2099,9 +2100,7 @@ fn NewSocket(comptime ssl: bool) type { var raw = handlers.vm.allocator.create(TLSSocket) catch @panic("OOM"); var raw_handlers_ptr = handlers.vm.allocator.create(Handlers) catch @panic("OOM"); - this.handlers.unprotect(); - - var cloned_handlers: Handlers = .{ + raw_handlers_ptr.* = .{ .vm = globalObject.bunVM(), .globalObject = globalObject, .onOpen = this.handlers.onOpen, @@ -2114,11 +2113,17 @@ fn NewSocket(comptime ssl: bool) type { .onError = this.handlers.onError, .onHandshake = this.handlers.onHandshake, .binary_type = this.handlers.binary_type, + .is_server = this.handlers.is_server, }; - - raw_handlers_ptr.* = cloned_handlers; - raw_handlers_ptr.is_server = this.handlers.is_server; - raw_handlers_ptr.protect(); + this.handlers.onOpen = .zero; + this.handlers.onClose = .zero; + this.handlers.onData = .zero; + this.handlers.onWritable = .zero; + this.handlers.onTimeout = .zero; + this.handlers.onConnectError = .zero; + this.handlers.onEnd = .zero; + this.handlers.onError = .zero; + this.handlers.onHandshake = .zero; raw.* = .{ .handlers = raw_handlers_ptr, .this_value = .zero, diff --git a/src/deps/uws.zig b/src/deps/uws.zig index 5dbe4f5d8..c2cd24063 100644 --- a/src/deps/uws.zig +++ b/src/deps/uws.zig @@ -54,7 +54,6 @@ pub fn NewSocketHandler(comptime ssl: bool) type { comptime ContextType: type, comptime Fields: anytype, ) ?NewSocketHandler(true) { - const Type = comptime if (@TypeOf(Fields) != type) @TypeOf(Fields) else Fields; const TLSSocket = NewSocketHandler(true); const SocketHandler = struct { const alignment = if (ContextType == anyopaque) @@ -140,24 +139,16 @@ pub fn NewSocketHandler(comptime ssl: bool) type { } }; - var events: us_socket_events_t = .{}; - - if (comptime @hasDecl(Type, "onOpen") and @typeInfo(@TypeOf(Type.onOpen)) != .Null) - events.on_open = SocketHandler.on_open; - if (comptime @hasDecl(Type, "onClose") and @typeInfo(@TypeOf(Type.onClose)) != .Null) - events.on_close = SocketHandler.on_close; - if (comptime @hasDecl(Type, "onData") and @typeInfo(@TypeOf(Type.onData)) != .Null) - events.on_data = SocketHandler.on_data; - if (comptime @hasDecl(Type, "onWritable") and @typeInfo(@TypeOf(Type.onWritable)) != .Null) - events.on_writable = SocketHandler.on_writable; - if (comptime @hasDecl(Type, "onTimeout") and @typeInfo(@TypeOf(Type.onTimeout)) != .Null) - events.on_timeout = SocketHandler.on_timeout; - if (comptime @hasDecl(Type, "onConnectError") and @typeInfo(@TypeOf(Type.onConnectError)) != .Null) - events.on_connect_error = SocketHandler.on_connect_error; - if (comptime @hasDecl(Type, "onEnd") and @typeInfo(@TypeOf(Type.onEnd)) != .Null) - events.on_end = SocketHandler.on_end; - if (comptime @hasDecl(Type, "onHandshake") and @typeInfo(@TypeOf(Type.onHandshake)) != .Null) - events.on_handshake = SocketHandler.on_handshake; + var events: us_socket_events_t = .{ + .on_open = SocketHandler.on_open, + .on_close = SocketHandler.on_close, + .on_data = SocketHandler.on_data, + .on_writable = SocketHandler.on_writable, + .on_timeout = SocketHandler.on_timeout, + .on_connect_error = SocketHandler.on_connect_error, + .on_end = SocketHandler.on_end, + .on_handshake = SocketHandler.on_handshake, + }; const socket = us_socket_wrap_with_tls(ssl_int, this.socket, options, events, socket_ext_size) orelse return null; return NewSocketHandler(true).from(socket); |