  PROCEDURE [INLINE] dfp$set_write_lock
    (VAR read_write_lock: {Input, Output} dft$read_write_lock);

    VAR
      new_value: integer,
      reader_count: integer,
      reject_incremented: boolean,
      status: ost$status;

    reject_incremented := FALSE;
    osp$increment_locked_variable (
          read_write_lock.writer_count, { Best Guess = } 0, new_value);
    REPEAT
      osp$fetch_locked_variable (read_write_lock.reader_count, reader_count);
      IF reader_count > 0 THEN
        IF NOT reject_incremented THEN
          osp$increment_locked_variable (
                read_write_lock.reject_count, { Best Guess = } 0, new_value);
          reject_incremented := TRUE;
        IFEND;
        pmp$delay (2, status);
      IFEND;
    UNTIL (reader_count = 0);
    osp$set_signature_lock (read_write_lock.write_lock, osc$wait, status);
    IF NOT status.normal THEN
      osp$system_error ('ERROR SETTING WRITE LOCK', ^status);
    IFEND;
    osp$begin_system_activity;
  PROCEND dfp$set_write_lock;
?? PUSH (LISTEXT := ON) ??
*copyc dft$read_write_lock
*copyc osp$begin_system_activity
*copyc osp$decrement_locked_variable
*copyc osp$fetch_locked_variable
*copyc osp$increment_locked_variable
*copyc osp$set_signature_lock
*copyc osp$system_error
*copyc ost$status
*copyc pmp$delay
?? POP ??
