aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/event_loop.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2023-07-11 19:14:34 -0700
committerGravatar GitHub <noreply@github.com> 2023-07-11 19:14:34 -0700
commitcbb88672f217a90db1aa1eb29cd92d5d9035b22b (patch)
tree43a00501f3cde495967e116f0b660777051551f8 /src/bun.js/event_loop.zig
parent1f900cff453700b19bca2acadfe26da4468c1282 (diff)
parent34b0e7a2bbd8bf8097341cdb0075d0908283e834 (diff)
downloadbun-cbb88672f217a90db1aa1eb29cd92d5d9035b22b.tar.gz
bun-cbb88672f217a90db1aa1eb29cd92d5d9035b22b.tar.zst
bun-cbb88672f217a90db1aa1eb29cd92d5d9035b22b.zip
Merge branch 'main' into jarred/esm-conditionsjarred/esm-conditions
Diffstat (limited to 'src/bun.js/event_loop.zig')
-rw-r--r--src/bun.js/event_loop.zig31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/bun.js/event_loop.zig b/src/bun.js/event_loop.zig
index 8441bd064..a3ccd16ad 100644
--- a/src/bun.js/event_loop.zig
+++ b/src/bun.js/event_loop.zig
@@ -224,6 +224,7 @@ pub const CppTask = opaque {
const ThreadSafeFunction = JSC.napi.ThreadSafeFunction;
const MicrotaskForDefaultGlobalObject = JSC.MicrotaskForDefaultGlobalObject;
const HotReloadTask = JSC.HotReloader.HotReloadTask;
+const FSWatchTask = JSC.Node.FSWatcher.FSWatchTask;
const PollPendingModulesTask = JSC.ModuleLoader.AsyncModule.Queue;
// const PromiseTask = JSInternalPromise.Completion.PromiseTask;
const GetAddrInfoRequestTask = JSC.DNS.GetAddrInfoRequest.Task;
@@ -242,6 +243,7 @@ pub const Task = TaggedPointerUnion(.{
HotReloadTask,
PollPendingModulesTask,
GetAddrInfoRequestTask,
+ FSWatchTask,
// PromiseTask,
// TimeoutTasklet,
});
@@ -467,6 +469,11 @@ pub const EventLoop = struct {
// special case: we return
return 0;
},
+ .FSWatchTask => {
+ var transform_task: *FSWatchTask = task.get(FSWatchTask).?;
+ transform_task.*.run();
+ transform_task.deinit();
+ },
@field(Task.Tag, typeBaseName(@typeName(AnyTask))) => {
var any: *AnyTask = task.get(AnyTask).?;
any.run();
@@ -666,6 +673,30 @@ pub const EventLoop = struct {
}
}
+ pub fn waitForPromiseWithTimeout(this: *EventLoop, promise: JSC.AnyPromise, timeout: u32) bool {
+ return switch (promise.status(this.global.vm())) {
+ JSC.JSPromise.Status.Pending => {
+ if (timeout == 0) {
+ return false;
+ }
+ var start_time = std.time.milliTimestamp();
+ while (promise.status(this.global.vm()) == .Pending) {
+ this.tick();
+
+ if (std.time.milliTimestamp() - start_time > timeout) {
+ return false;
+ }
+
+ if (promise.status(this.global.vm()) == .Pending) {
+ this.autoTick();
+ }
+ }
+ return true;
+ },
+ else => true,
+ };
+ }
+
pub fn waitForTasks(this: *EventLoop) void {
this.tick();
while (this.tasks.count > 0) {