diff options
author | 2023-07-30 23:51:43 -0700 | |
---|---|---|
committer | 2023-07-30 23:51:43 -0700 | |
commit | 9ecae59bbb1a302977afa94fd879a0c6f8d6195f (patch) | |
tree | 7bfff6d9c3264b8d1fce85f63891a1f3e5833a52 /src/bun.js/api/filesystem_router.zig | |
parent | 2ea7290172da21f4a9cd58232bf9c1ea0997d6e2 (diff) | |
download | bun-9ecae59bbb1a302977afa94fd879a0c6f8d6195f.tar.gz bun-9ecae59bbb1a302977afa94fd879a0c6f8d6195f.tar.zst bun-9ecae59bbb1a302977afa94fd879a0c6f8d6195f.zip |
Fix memory leak in response.clone(), further reduce memory usage of Request & Response (#3902)
* Atomize respsone.url & response.statusText
* Fix warning
* Atomize Request & Response URLs when possible
* Fix memory leak in response.clone()
bun/bench/snippets on jarred/atomize
❯ mem bun --smol request-response-clone.mjs
cpu: Apple M1 Max
runtime: bun 0.7.2 (arm64-darwin)
benchmark time (avg) (min … max) p75 p99 p995
-------------------------------------------------------- -----------------------------
req.clone().url 77.3 ns/iter (40.35 ns … 222.64 ns) 91.53 ns 128.11 ns 172.78 ns
resp.clone().url 162.43 ns/iter (116 ns … 337.77 ns) 177.4 ns 232.38 ns 262.65 ns
Peak memory usage: 60 MB
bun/bench/snippets on jarred/atomize
❯ mem bun-0.7.1 --smol request-response-clone.mjs
cpu: Apple M1 Max
runtime: bun 0.7.1 (arm64-darwin)
benchmark time (avg) (min … max) p75 p99 p995
-------------------------------------------------------- -----------------------------
req.clone().url 115.85 ns/iter (80.35 ns … 247.39 ns) 128.19 ns 181.93 ns 207.23 ns
resp.clone().url 252.32 ns/iter (202.6 ns … 351.07 ns) 266.56 ns 325.88 ns 334.73 ns
Peak memory usage: 1179 MB
* Update tests
* Update js_ast.zig
* Update test
---------
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Diffstat (limited to 'src/bun.js/api/filesystem_router.zig')
-rw-r--r-- | src/bun.js/api/filesystem_router.zig | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/bun.js/api/filesystem_router.zig b/src/bun.js/api/filesystem_router.zig index 216f66b7f..edb666040 100644 --- a/src/bun.js/api/filesystem_router.zig +++ b/src/bun.js/api/filesystem_router.zig @@ -75,6 +75,8 @@ const DeprecatedGlobalRouter = struct { }; var path_: ?ZigString.Slice = null; + var req_url_slice: ZigString.Slice = .{}; + defer req_url_slice.deinit(); var pathname: string = ""; defer { if (path_) |path| { @@ -88,7 +90,8 @@ const DeprecatedGlobalRouter = struct { var url = URL.parse(path_.?.slice()); pathname = url.pathname; } else if (arg.as(Request)) |req| { - var url = URL.parse(req.url); + req_url_slice = req.url.toUTF8(bun.default_allocator); + var url = URL.parse(req_url_slice.slice()); pathname = url.pathname; } @@ -389,11 +392,11 @@ pub const FileSystemRouter = struct { if (argument.isCell()) { if (argument.as(JSC.WebCore.Request)) |req| { req.ensureURL() catch unreachable; - break :brk ZigString.Slice.fromUTF8NeverFree(req.url).clone(globalThis.allocator()) catch unreachable; + break :brk req.url.toUTF8(globalThis.allocator()); } if (argument.as(JSC.WebCore.Response)) |resp| { - break :brk ZigString.Slice.fromUTF8NeverFree(resp.url).clone(globalThis.allocator()) catch unreachable; + break :brk resp.url.toUTF8(globalThis.allocator()); } } |