private static FiberScheduler currentScheduler() { final Fiber currentFiber = Fiber.currentFiber(); if (currentFiber == null) throw new IllegalStateException("Method called not within a fiber"); return currentFiber.getScheduler(); }
private static boolean canTransferControl(Strand other) { Strand current = Strand.currentStrand(); return (other.isFiber() && current.isFiber() && ((Fiber) other).getScheduler() == ((Fiber) current).getScheduler()); }
private static FiberScheduler defaultScheduler() { final Fiber parent = currentFiber(); if (parent == null) return DefaultFiberScheduler.getInstance(); else return parent.getScheduler(); }
public Future<Void> schedule(Fiber<?> fiber, Object blocker, long delay, TimeUnit unit) { if (fiber == null || unit == null) throw new NullPointerException(); assert fiber.getScheduler() == scheduler; ScheduledFutureTask t = new ScheduledFutureTask(fiber, blocker, triggerTime(delay, unit)); delayedExecute(t); return t; }
@Override public void run(Fiber current) { try { current.getScheduler().schedule(current, FiberAsync.this, timeout, unit); current.record(1, "FiberAsync", "run", "Calling requestAsync on class %s", this); registrationThread = Thread.currentThread(); requestAsync(); current.record(1, "FiberAsync", "run", "requestAsync on %s done", FiberAsync.this); } catch (Throwable t) { asyncFailed(t); } finally { registrationComplete = true; } } })) {