aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Ai Hoshino <ambiguous404@gmail.com> 2023-08-25 08:16:51 +0800
committerGravatar GitHub <noreply@github.com> 2023-08-24 17:16:51 -0700
commit339d2c7f190c81bbf2c64f3fd5715b3ebe8841ab (patch)
treea29fd63e0d0411ac5cf0f2822b28e5307b327a31
parentd2bef4fbeae798cde08745b211d150417428b270 (diff)
downloadbun-339d2c7f190c81bbf2c64f3fd5715b3ebe8841ab.tar.gz
bun-339d2c7f190c81bbf2c64f3fd5715b3ebe8841ab.tar.zst
bun-339d2c7f190c81bbf2c64f3fd5715b3ebe8841ab.zip
Make the server not crash if an error occurs in dev build. (#4300)
Close: #4298
-rw-r--r--src/bun.js/api/server.zig10
-rw-r--r--test/js/node/http/node-http.test.ts16
2 files changed, 21 insertions, 5 deletions
diff --git a/src/bun.js/api/server.zig b/src/bun.js/api/server.zig
index 64a85d6a4..ca803cef2 100644
--- a/src/bun.js/api/server.zig
+++ b/src/bun.js/api/server.zig
@@ -1023,7 +1023,7 @@ fn NewFlags(comptime debug_mode: bool) type {
has_written_status: bool = false,
response_protected: bool = false,
aborted: bool = false,
- finalized: bun.DebugOnly(bool) = bun.DebugOnlyDefault(false),
+ has_finalized: bun.DebugOnly(bool) = bun.DebugOnlyDefault(false),
};
}
@@ -1515,9 +1515,9 @@ fn NewRequestContext(comptime ssl_enabled: bool, comptime debug_mode: bool, comp
ctxLog("finalizeWithoutDeinit<d> ({*})<r>", .{this});
this.blob.detach();
- if (comptime Environment.allow_assert) {
- std.debug.assert(!this.flags.finalized);
- this.flags.finalized = true;
+ if (comptime Environment.isDebug) {
+ ctxLog("finalizeWithoutDeinit: has_finalized {any}", .{this.flags.has_finalized});
+ this.flags.has_finalized = true;
}
if (!this.response_jsvalue.isEmpty()) {
@@ -1596,7 +1596,7 @@ fn NewRequestContext(comptime ssl_enabled: bool, comptime debug_mode: bool, comp
ctxLog("deinit<d> ({*})<r>", .{this});
if (comptime Environment.allow_assert)
- std.debug.assert(this.flags.finalized);
+ std.debug.assert(this.flags.has_finalized);
if (comptime Environment.allow_assert)
std.debug.assert(this.flags.has_marked_complete);
diff --git a/test/js/node/http/node-http.test.ts b/test/js/node/http/node-http.test.ts
index 6dca23547..3a654c393 100644
--- a/test/js/node/http/node-http.test.ts
+++ b/test/js/node/http/node-http.test.ts
@@ -750,4 +750,20 @@ describe("node:http", () => {
}
});
});
+
+ test("test server internal error, issue#4298", done => {
+ const server = createServer((req, res) => {
+ throw Error("throw an error here.");
+ });
+ server.listen({ port: 0 }, async (_err, host, port) => {
+ try {
+ await fetch(`http://${host}:${port}`).then(res => {
+ expect(res.status).toBe(500);
+ done();
+ });
+ } catch (err) {
+ done(err);
+ }
+ });
+ });
});