  PROCEDURE [INLINE] osp$set_job_signature_lock
    (VAR lock: ost$signature_lock);

?? PUSH (LISTEXT := ON) ??
*copyc clc$compiling_for_test_harness
*copyc fsc$compiling_for_test_harness
*copyc sfc$compiling_for_test_harness

*IF NOT $true(osv$unix)
    ?IF NOT (clc$compiling_for_test_harness OR fsc$compiling_for_test_harness OR
          sfc$compiling_for_test_harness) THEN

      VAR
        task_id: ost$global_task_id,
        xcb_p: ^ost$execution_control_block,
        new_value: integer,
        actual_value: integer,
        cs_status: 0 .. 2;

      xcb_p := #ADDRESS (1, osc$segnum_job_fixed_heap,
            #READ_REGISTER (osc$pr_base_constant));
      task_id := xcb_p^.global_task_id;
      new_value := task_id.index * 256 * #SIZE (task_id.seqno) + task_id.seqno;

    /lock_loop/
      WHILE TRUE DO
        REPEAT
          #COMPARE_SWAP (lock.lock_id, 0, new_value, actual_value, cs_status);
        UNTIL cs_status <> osc$cs_variable_locked;
        IF cs_status = osc$cs_successful THEN
          RETURN;
        IFEND;

        IF new_value = actual_value THEN
          osp$system_error ('Lock already set by current task', NIL);
        IFEND;
        syp$cycle_for_lock (tmc$cyc_set_job_lock, ^lock);
      WHILEND /lock_loop/;
    ?ELSE
*IFEND
      IF lock.lock_id <> 0 THEN
*IF NOT $true(osv$unix)
        osp$system_error (' lock  set', NIL);
*ELSE
        RETURN;
*IFEND
      IFEND;
      lock.lock_id := 12;
*IF NOT $true(osv$unix)
    ?IFEND
*IFEND

  PROCEND osp$set_job_signature_lock;
*copyc ost$execution_control_block
*copyc ost$heap
*copyc osc$processor_defined_registers
*copyc ost$signature_lock
*IF NOT $true(osv$unix)
*copyc osp$system_error
*copyc syp$cycle_for_lock
*IFEND
?? POP ??
