aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-15 04:59:53 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-15 04:59:53 -0700
commit6f095a63946470721d1dde4e527b60cbc2a9f515 (patch)
tree00c555b8730d0105e35e07e2704cdf210ea96616 /src
parent8a52e09e8bf8f1f5a0ec1bd3e6cbc80bf4adacf4 (diff)
downloadbun-6f095a63946470721d1dde4e527b60cbc2a9f515.tar.gz
bun-6f095a63946470721d1dde4e527b60cbc2a9f515.tar.zst
bun-6f095a63946470721d1dde4e527b60cbc2a9f515.zip
zero copy
Diffstat (limited to 'src')
-rw-r--r--src/javascript/jsc/webcore/response.zig36
1 files changed, 15 insertions, 21 deletions
diff --git a/src/javascript/jsc/webcore/response.zig b/src/javascript/jsc/webcore/response.zig
index cbe2e5826..8091d3c63 100644
--- a/src/javascript/jsc/webcore/response.zig
+++ b/src/javascript/jsc/webcore/response.zig
@@ -428,11 +428,12 @@ pub const Fetch = struct {
global_this: *JSGlobalObject = undefined,
empty_request_body: MutableString = undefined,
- pooled_body: *BodyPool.Node = undefined,
+ // pooled_body: *BodyPool.Node = undefined,
this_object: js.JSObjectRef = null,
resolve: js.JSObjectRef = null,
reject: js.JSObjectRef = null,
context: FetchTaskletContext = undefined,
+ response_buffer: MutableString = undefined,
blob_store: ?*Blob.Store = null,
@@ -483,9 +484,9 @@ pub const Fetch = struct {
this.javascript_vm = undefined;
this.promise = undefined;
this.status = Status.pending;
- var pooled = this.pooled_body;
- BodyPool.release(pooled);
- this.pooled_body = undefined;
+ // var pooled = this.pooled_body;
+ // BodyPool.release(pooled);
+ // this.pooled_body = undefined;
this.http = undefined;
this.this_object = null;
this.resolve = null;
@@ -541,7 +542,6 @@ pub const Fetch = struct {
var allocator = default_allocator;
var http_response = this.http.response.?;
var response = allocator.create(Response) catch unreachable;
- var duped = allocator.dupe(u8, this.http.response_buffer.toOwnedSlice()) catch unreachable;
if (this.blob_store) |store| {
store.deref();
}
@@ -559,7 +559,7 @@ pub const Fetch = struct {
.status_code = @truncate(u16, http_response.status_code),
},
.value = .{
- .Blob = Blob.init(duped, allocator, this.global_this),
+ .Blob = Blob.init(this.http.response_buffer.toOwnedSliceLeaky(), allocator, this.global_this),
},
},
};
@@ -579,15 +579,16 @@ pub const Fetch = struct {
var linked_list = FetchTasklet.Pool.get(allocator);
linked_list.data.javascript_vm = VirtualMachine.vm;
linked_list.data.empty_request_body = MutableString.init(allocator, 0) catch unreachable;
- linked_list.data.pooled_body = BodyPool.get(allocator);
+ // linked_list.data.pooled_body = BodyPool.get(allocator);
linked_list.data.blob_store = request_body_store;
+ linked_list.data.response_buffer = MutableString.initEmpty(allocator);
linked_list.data.http = try HTTPClient.AsyncHTTP.init(
allocator,
method,
url,
headers,
headers_buf,
- &linked_list.data.pooled_body.data,
+ &linked_list.data.response_buffer,
request_body orelse &linked_list.data.empty_request_body,
timeout,
@@ -973,7 +974,7 @@ pub const Headers = struct {
};
errdefer headers.deinit();
try headers.entries.ensureTotalCapacity(allocator, real_header_count);
- headers.buf.expandToCapacity();
+
while (j < total_header_count) : (j += 1) {
var key_ref = js.JSPropertyNameArrayGetNameAtIndex(header_keys, j);
var value_ref = js.JSObjectGetProperty(ctx, header_prop, key_ref, null);
@@ -1008,7 +1009,7 @@ pub const Headers = struct {
headers.allocator = getAllocator(ctx);
} else if (arguments.len == 1 and js.JSValueIsObject(ctx, arguments[0])) {
headers.* = .{
- .value = (JS.headersInit(ctx, arguments[0]) catch unreachable) orelse Headers{
+ .value = (JS.headersInit(ctx, arguments[0]) catch null) orelse Headers{
.entries = .{},
.buf = .{},
.allocator = getAllocator(ctx),
@@ -1835,15 +1836,10 @@ pub const Blob = struct {
return ZigString.init(buf).toValueGC(global);
},
.transfer => {
- var out = ZigString.init(buf).toValueGC(global);
- this.detach();
- return out;
+ var store = this.store.?;
+ this.transfer();
+ return ZigString.init(buf).external(global, store, Store.external);
},
- // .transfer => {
- // var store = this.store.?;
- // this.transfer();
- // return ZigString.init(buf).external(global, store, Store.external);
- // },
.share => {
this.store.?.ref();
return ZigString.init(buf).external(global, this.store.?, Store.external);
@@ -1865,10 +1861,8 @@ pub const Blob = struct {
return ZigString.toExternalU16(external.ptr, external.len, global).parseJSON(global);
}
- return ZigString.init(buf).external(
+ return ZigString.init(buf).toValue(
global,
- this.store.?,
- Store.external,
).parseJSON(global);
}
pub fn toArrayBuffer(this: *Blob, global: *JSGlobalObject, comptime lifetime: Lifetime) JSValue {