1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- .TH REF 9
- .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 (9)).
- .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 SOURCE
- .B /sys/src/9/port/chan.c
- .SH DIAGNOSTICS
- .I Decref
- will
- .IR panic (9)
- if the count goes negative,
- revealing a reference counting bug.
|