JOB_STACKFRAME_LOCK_CHILD stackframes in context will look as follows:
job_RunState.l -> size in bytes of below stackframe
JOB_STACKFRAME_LOCK_CHILD
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-child-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* instructions are the only
supported way of acquiring a lock.
A full getStackframe[ LOCK frame result looks like:
:owner object :kind :lock-child :lock object
Go to the first, previous, next, last section, table of contents.