Skip to content

Commit ddb51a8

Browse files
committed
move child apwning to fiber class instead.
1 parent 9af2742 commit ddb51a8

3 files changed

Lines changed: 21 additions & 4 deletions

File tree

VirtualMachine/EVIL.Ceres/ExecutionEngine/Concurrency/Fiber.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,21 @@ public void SetOnNativeFunctionInvoke(NativeFunctionInvokeHandler? handler)
423423
OnNativeFunctionInvoke = handler;
424424
}
425425

426+
public Fiber SpawnChild(
427+
bool immunized,
428+
FiberCrashHandler? crashHandler = null,
429+
Dictionary<string, ClosureContext>? closureContexts = null)
430+
{
431+
var fiber = VirtualMachine.Scheduler.CreateFiber(
432+
immunized,
433+
crashHandler,
434+
closureContexts ?? _closureContexts
435+
);
436+
437+
fiber.Parent = this;
438+
return fiber;
439+
}
440+
426441
public DynamicValue ThrowFromNative(DynamicValue value)
427442
{
428443
lock (_callStack)

VirtualMachine/EVIL.Ceres/ExecutionEngine/Concurrency/FiberScheduler.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ public sealed class FiberScheduler(
1919

2020
public ConcurrentFiberCollection Fibers { get; } = new(initialCapacity);
2121

22+
public FiberCrashHandler DefaultCrashHandler => _defaultCrashHandler;
23+
2224
[MethodImpl(MethodImplOptions.AggressiveInlining)]
2325
private void ProcessFiber(Fiber fiber)
2426
{
@@ -90,7 +92,7 @@ public Fiber CreateFiber(
9092
{
9193
var fiber = new Fiber(
9294
vm,
93-
crashHandler ?? _defaultCrashHandler,
95+
crashHandler ?? DefaultCrashHandler,
9496
closureContexts
9597
);
9698

VirtualMachine/EVIL.Ceres/ExecutionEngine/ExecutionUnit.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1196,15 +1196,15 @@ public void Step()
11961196
);
11971197
}
11981198

1199-
var awaitee = _fiber.VirtualMachine.Scheduler.CreateFiber(
1199+
var awaitee = _fiber.SpawnChild(
12001200
false,
12011201
closureContexts: (Dictionary<string, ClosureContext>)frame.Fiber.ClosureContexts
12021202
);
1203-
awaitee.Parent = _fiber;
12041203
awaitee.Schedule(a.Chunk!, args);
12051204
awaitee.Resume();
1206-
1205+
12071206
PushValue(awaitee);
1207+
12081208
_fiber.WaitFor(awaitee);
12091209
break;
12101210
}

0 commit comments

Comments
 (0)