REF(10.2)                                               REF(10.2)

     NAME
          Ref, incref, decref - reference counts

     SYNOPSIS
          int   incref(Ref *r)

          int   decref(Ref *r)

     DESCRIPTION
          A Ref structure holds a reference count for a data struc-
          ture:

               typedef struct
               struct Ref
               {
                   Lock;
                   long ref;
               } Ref;

          The reference count proper is found in ref; the Lock pre-
          vents concurrent updates (see lock(10.2)).

          Incref atomically increments the reference count r, and
          returns the new count.

          Decref atomically decrements the reference count r, and
          returns the new count.

     EXAMPLES
          Release a structure containing a Ref on last use.

               if(decref(s) == 0)
                     free(s);

     DIAGNOSTICS
          Decref will panic(10.2) if the count goes negative, reveal-
          ing a reference counting bug.

     SOURCE
          /os/port/chan.c
          /emu/port/chan.c