
  PROCEDURE [INLINE] osp$get_locked_variable_value
    (VAR variable: integer;
         expected_value: integer;
     VAR actual_value: integer);

?? PUSH (LISTEXT := ON) ??
*copy osh$get_locked_variable_value

    VAR
      initial: integer,
      result: 0 .. 2;

    IF expected_value < 0 THEN
      initial := 0;
    ELSE
      initial := expected_value;
    IFEND;

    REPEAT
      #COMPARE_SWAP (variable, initial, initial, actual_value, result);
    UNTIL (result <> 2);

  PROCEND osp$get_locked_variable_value;
?? POP ??
