aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Ciro Spaciari <ciro.spaciari@gmail.com> 2023-07-06 02:22:56 -0300
committerGravatar GitHub <noreply@github.com> 2023-07-05 22:22:56 -0700
commit8869bac4117b41196c4a73d9145c0beaf5e8437d (patch)
treee6e5163801279b7b3ab6e23dd78671983148856b
parentf61d9ef4761444d0550aea90b2656727d41ce1fa (diff)
downloadbun-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.zig29
-rw-r--r--src/deps/uws.zig29
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);