JOB_STACKFRAME_LOCK stackframes in context will look as follows:
job_RunState.l -> size in bytes of below stackframe JOB_STACKFRAME_LOCK lock object held by job size in bytes of above stackframe size in bytes of below stackframe JOB_STACKFRAME_NORMAL local_variable_N ... local_variable_1 job_RunState.v -> local_variable_0 compiledFunction for this frame. programCounter for this frame. size in bytes of above stackframe
These stackframes are pushed to mark the scope of an
with-lock-do{...}
clause, and include a pointer to the
lock held by the job during this interval: The point is to
ensure that the server can reliably find and release all
locks held by a job when killing it. To ensure this, the
pushLockframe
instruction is the only
supported way of acquiring a lock.
A full getStackframe[
LOCK frame result looks like:
:owner object :kind :lock :lock object
Go to the first, previous, next, last section, table of contents.