aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-07-22 20:49:35 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-07-22 20:49:35 -0700
commit601fd3ead532b66763d3c57a5c0b9d52c59c1312 (patch)
tree30f758c3192d94f7b2e8b7ba311dcba39b6a9f95
parent07e08b086ae7bb78feffe6b0d325dcecb1765ad9 (diff)
downloadbun-601fd3ead532b66763d3c57a5c0b9d52c59c1312.tar.gz
bun-601fd3ead532b66763d3c57a5c0b9d52c59c1312.tar.zst
bun-601fd3ead532b66763d3c57a5c0b9d52c59c1312.zip
in Bun.write(), defer creating the Promise until we're just about to schedule the task
-rw-r--r--src/bun.js/webcore/blob.zig10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/bun.js/webcore/blob.zig b/src/bun.js/webcore/blob.zig
index 3852b4439..e81d1f8f6 100644
--- a/src/bun.js/webcore/blob.zig
+++ b/src/bun.js/webcore/blob.zig
@@ -691,13 +691,9 @@ pub const Blob = struct {
if (destination_type == .file and source_type == .bytes) {
var write_file_promise = bun.default_allocator.create(WriteFilePromise) catch unreachable;
- var promise = JSC.JSPromise.create(ctx.ptr());
- const promise_value = promise.asValue(ctx);
write_file_promise.* = .{
.globalThis = ctx.ptr(),
};
- write_file_promise.promise.strong.set(ctx, promise_value);
- promise_value.ensureStillAlive();
var file_copier = Store.WriteFile.create(
bun.default_allocator,
@@ -708,6 +704,12 @@ pub const Blob = struct {
WriteFilePromise.run,
) catch unreachable;
var task = Store.WriteFile.WriteFileTask.createOnJSThread(bun.default_allocator, ctx.ptr(), file_copier) catch unreachable;
+
+ // Defer promise creation until we're just about to schedule the task
+ var promise = JSC.JSPromise.create(ctx.ptr());
+ const promise_value = promise.asValue(ctx);
+ write_file_promise.promise.strong.set(ctx, promise_value);
+ promise_value.ensureStillAlive();
task.schedule();
return promise_value.asObjectRef();
}