  PROCEDURE [INLINE] gfp$clear_signature_lock
    (VAR lock: gft$signature_lock);

?? PUSH (LISTEXT := ON) ??

      VAR
        task_id: ost$global_task_id,
        xcb_p: ^ost$execution_control_block;

      xcb_p := #ADDRESS (1, osc$segnum_job_fixed_heap,
            #READ_REGISTER (osc$pr_base_constant));
      task_id := xcb_p^.global_task_id;

      IF lock.gtid <> task_id THEN
        osp$system_error ('GF - FDE not locked', NIL);
      IFEND;

      IF lock.count > 0 THEN
        lock.count := lock.count - 1;
      ELSE
        lock.gtid.seqno := 0;
        #spoil (lock);
        lock.locked := FALSE;
        xcb_p^.system_table_lock_count := xcb_p^.system_table_lock_count - 256;

        IF xcb_p^.stlc_allocation AND (xcb_p^.system_table_lock_count < 256) THEN
          xcb_p^.stlc_allocation := FALSE;
          osp$mfh_for_segment_manager;
        IFEND;

        IF (xcb_p^.system_table_lock_count <= 0) AND (xcb_p^.system_give_up_cpu) THEN
          syp$cycle_for_lock (tmc$cyc_clear_sys_lock, #LOC (lock));
        IFEND;
      IFEND;

  PROCEND gfp$clear_signature_lock;
*copyc gft$signature_lock
*copyc osc$processor_defined_registers
*copyc osp$mfh_for_segment_manager
*copyc ost$execution_control_block
*copyc ost$heap
*copyc osp$system_error
*copyc syp$cycle_for_lock
?? POP ??
