.TH REF 10.2.SH NAMERef, incref, decref \- reference counts.SH SYNOPSIS.ta \w'\fLchar* 'u.PP.Bint incref(Ref *r).PP.Bint decref(Ref *r).SH DESCRIPTIONA.B Refstructure holds a reference count for a data structure:.IP.EXtypedef structstruct Ref{ Lock; long ref;} Ref;.EE.PPThe reference count proper is found in.BR ref ;the.B Lockprevents concurrent updates(see.IR lock (10.2))..PP.I Increfatomically increments the reference count.IR r ,and returns the new count..PP.I Decrefatomically decrements the reference count.IR r ,and returns the new count..SH EXAMPLESRelease a structure containing a.B Refon last use..IP.EXif(decref(s) == 0) free(s);.EE.SH DIAGNOSTICS.I Decrefwill.IR panic (10.2)if the count goes negative,revealing a reference counting bug..SH SOURCE.B /os/port/chan.c.br.B /emu/port/chan.c
.TH REF 10.2
.SH NAME
Ref, incref, decref \- reference counts
.SH SYNOPSIS
.ta \w'\fLchar* 'u
.PP
.B
int incref(Ref *r)
.PP
.B
int decref(Ref *r)
.SH DESCRIPTION
A
.B Ref
structure holds a reference count for a data structure:
.IP
.EX
typedef struct
struct Ref
{
Lock;
long ref;
} Ref;
.EE
.PP
The reference count proper is found in
.BR ref ;
the
.B Lock
prevents concurrent updates
(see
.IR lock (10.2)).
.PP
.I Incref
atomically increments the reference count
.IR r ,
and returns the new count.
.PP
.I Decref
atomically decrements the reference count
.IR r ,
and returns the new count.
.SH EXAMPLES
Release a structure containing a
.B Ref
on last use.
.IP
.EX
if(decref(s) == 0)
free(s);
.EE
.SH DIAGNOSTICS
.I Decref
will
.IR panic (10.2)
if the count goes negative,
revealing a reference counting bug.
.SH SOURCE
.B /os/port/chan.c
.br
.B /emu/port/chan.c