private boolean park1(Object blocker, ParkAction postParkAction, long timeout, TimeUnit unit) throws SuspendExecution {
record(1, "Fiber", "park", "Parking %s blocker: %s", this, blocker);
if (isRecordingLevel(2) && !getStackTrace)
record(2, "Fiber", "park", "Parking %s at %s", this, Arrays.toString(getStackTrace()));
if (prePark != null)
prePark.run(this);
this.postPark = postParkAction;
if (timeout > 0 && unit != null)
this.timeoutTask = scheduler.schedule(this, blocker, timeout, unit);
return task.park(blocker, postParkAction != null);
}