Go to the first, previous, next, last section, table of contents.


JOB_STACKFRAME_LOCK_CHILD

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.