
  PROCEDURE [INLINE] nlp$get_nonexclusive_access
    (VAR access_control: nlt$access_control);

?? PUSH (LISTEXT := ON) ??
?? RIGHT := 110 ??

    VAR
      old_access,
      new_access: nlt$access_control,
      cs_status: osc$cs_successful .. osc$cs_variable_locked;

    old_access.value := 0;
    new_access := old_access;
    new_access.nonexclusive_accessors := 1;
    REPEAT
      #COMPARE_SWAP (access_control, old_access, new_access, old_access, cs_status);
      IF (cs_status = osc$cs_failed) THEN
        IF old_access.exclusive THEN
          syp$cycle;
          old_access.exclusive := FALSE;
        IFEND;
        new_access.nonexclusive_accessors := old_access.nonexclusive_accessors + 1;
      IFEND;
    UNTIL (cs_status = osc$cs_successful);

  PROCEND nlp$get_nonexclusive_access;

*copyc nlt$access_control
*copyc ost$signature_lock
*copyc syp$cycle
?? POP ??

