aboutsummaryrefslogtreecommitdiff
path: root/src/http.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-02-10 01:46:49 -0800
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-02-10 01:46:49 -0800
commitcc1e19ade0aaea76e17b22c35f1b4f503cea5eec (patch)
tree813286cb4b6d613b58a12a11ea80e2611fea47b6 /src/http.zig
parent27501a05767f76b2f5cee785e6a761d5bb99ae34 (diff)
downloadbun-cc1e19ade0aaea76e17b22c35f1b4f503cea5eec.tar.gz
bun-cc1e19ade0aaea76e17b22c35f1b4f503cea5eec.tar.zst
bun-cc1e19ade0aaea76e17b22c35f1b4f503cea5eec.zip
[bun dev] Use a Mimalloc Arena to attempt to resolve a crash when `bun dev` has been running for awhile
Diffstat (limited to 'src/http.zig')
-rw-r--r--src/http.zig23
1 files changed, 13 insertions, 10 deletions
diff --git a/src/http.zig b/src/http.zig
index 89ed1fe97..e16f4c2a3 100644
--- a/src/http.zig
+++ b/src/http.zig
@@ -34,7 +34,8 @@ const DotEnv = @import("./env_loader.zig");
const mimalloc = @import("./allocators/mimalloc.zig");
const MacroMap = @import("./resolver/package_json.zig").MacroMap;
const Analytics = @import("./analytics/analytics_thread.zig");
-
+const Arena = @import("./mimalloc_arena.zig").Arena;
+const ArenaType = Arena;
pub fn constStrToU8(s: string) []u8 {
return @intToPtr([*]u8, @ptrToInt(s.ptr))[0..s.len];
}
@@ -83,7 +84,7 @@ pub const RequestContext = struct {
url: URLPath,
conn: *tcp.Connection,
allocator: std.mem.Allocator,
- arena: *std.heap.ArenaAllocator,
+ arena: *ArenaType,
log: logger.Log,
bundler: *Bundler,
keep_alive: bool = true,
@@ -670,7 +671,7 @@ pub const RequestContext = struct {
pub fn init(
req: Request,
- arena: *std.heap.ArenaAllocator,
+ arena: *ArenaType,
conn: *tcp.Connection,
bundler_: *Bundler,
watcher_: *Watcher,
@@ -1001,6 +1002,7 @@ pub const RequestContext = struct {
Watcher,
@TypeOf(this.bundler.fs),
true,
+ .absolute_url,
);
const CSSBundler = Css.NewBundler(
@@ -1010,6 +1012,7 @@ pub const RequestContext = struct {
Watcher,
@TypeOf(this.bundler.fs),
false,
+ .absolute_url,
);
this.printer.ctx.reset();
@@ -1129,7 +1132,7 @@ pub const RequestContext = struct {
}
pub fn handleJSErrorFmt(this: *HandlerThread, comptime step: Api.FallbackStep, err: anyerror, comptime fmt: string, args: anytype) !void {
- var arena = std.heap.ArenaAllocator.init(default_allocator);
+ var arena = ArenaType.init() catch unreachable;
var allocator = arena.allocator();
defer arena.deinit();
@@ -1167,7 +1170,7 @@ pub const RequestContext = struct {
}
pub fn handleRuntimeJSError(this: *HandlerThread, js_value: JavaScript.JSValue, comptime step: Api.FallbackStep, comptime fmt: string, args: anytype) !void {
- var arena = std.heap.ArenaAllocator.init(default_allocator);
+ var arena = ArenaType.init() catch unreachable;
var allocator = arena.allocator();
defer arena.deinit();
defer this.log.msgs.clearRetainingCapacity();
@@ -1213,7 +1216,7 @@ pub const RequestContext = struct {
}
pub fn handleFetchEventError(this: *HandlerThread, err: anyerror, js_value: JavaScript.JSValue, ctx: *RequestContext) !void {
- var arena = std.heap.ArenaAllocator.init(default_allocator);
+ var arena = ArenaType.init() catch unreachable;
var allocator = arena.allocator();
defer arena.deinit();
@@ -1440,7 +1443,7 @@ pub const RequestContext = struct {
}
while (true) {
- __arena = std.heap.ArenaAllocator.init(vm.allocator);
+ __arena = std.heap.ArenaAllocator.init(default_allocator);
JavaScript.VirtualMachine.vm.arena = &__arena;
JavaScript.VirtualMachine.vm.has_loaded = true;
JavaScript.VirtualMachine.vm.tick();
@@ -1834,7 +1837,7 @@ pub const RequestContext = struct {
break :brk full_build.id;
};
- var arena = std.heap.ArenaAllocator.init(default_allocator);
+ var arena = ArenaType.init() catch unreachable;
defer arena.deinit();
var head = Websocket.WebsocketHeader{
@@ -3193,8 +3196,8 @@ pub const Server = struct {
return;
};
- var request_arena = server.allocator.create(std.heap.ArenaAllocator) catch unreachable;
- request_arena.* = std.heap.ArenaAllocator.init(server.allocator);
+ var request_arena = server.allocator.create(Arena) catch unreachable;
+ request_arena.* = Arena.init() catch unreachable;
req_ctx_ = RequestContext.init(
req,