[Turn on line numbering]arg @values; var i, tid, l, obj; values ?= [0]; tid = task_id(); for obj in (.descendants()) obj.grab(@values); tasks = tasks.add(tid, (| tasks[tid] + [values] |) || values); while (1) { if (!(l = ._test_locks(tid, values))) { for i in (values) ._add_to_lock(tid, i); return; } else { suspended = suspended.add(tid, l.length()); $scheduler.suspend(this()); } }
["// Created 11-Mar-1997 as a part of ColdCore, see: @help Credit"]