TH 9PFID 2
SH NAME
Fid, Fidpool, allocfidpool, freefidpool, allocfid, closefid, lookupfid, removefid,
Req, Reqpool, allocreqpool, freereqpool, allocreq, closereq, lookupreq, removereq \- 9P fid, request tracking
SH SYNOPSIS
ft L
nf
#include <u.h>
#include <libc.h>
#include <fcall.h>
#include <thread.h>
#include <9p.h>
fi
PP
ft L
nf
ta \w'\fL    'u +\w'\fLulong 'u
typedef struct Fid
{
       ulong   fid;
       char    omode;  /* -1 if not open */
       char    *uid;
       Qid     qid;
       File    *file;
       void    *aux;
       \fI...\fP
} Fid;
fi
PP
ft L
nf
ta \w'\fL    'u +\w'\fLulong 'u
typedef struct Req
{
       ulong   tag;
       Fcall   ifcall;
       Fcall   ofcall;
       Req     *oldreq;
       void    *aux;
       Fid     *fid;
       Fid     *afid;
       Fid     *newfid;
       \fI...\fP
} Req;
fi
PP
ft L
nf
ta \w'\fLFidpool* 'u
Fidpool*        allocfidpool(void (*destroy)(Fid*))
void    freefidpool(Fidpool *p)
Fid*    allocfid(Fidpool *p, ulong fid)
Fid*    lookupfid(Fidpool *p, ulong fid)
Fid*    removefid(Fidpool *p, ulong fid);
void    closefid(Fid *f)
fi
PP
ft L
nf
ta \w'\fLReqpool* 'u
Reqpool*        allocreqpool(void (*destroy)(Req*))
void    freereqpool(Reqpool *p)
Req*    allocreq(Reqpool *p, ulong tag)
Req*    lookupreq(Reqpool *p, ulong tag)
Req*    removereq(Reqpool *p, ulong tag);
void    closereq(Req *f)
fi
SH DESCRIPTION
These routines provide management of
B Fid
and
B Req
structures from
BR Fidpool s
and
BR Reqpool s.
They are primarily used by the 9P server loop
described in
IR 9p (2).
PP
B Fid
structures are intended to represent
active fids in a 9P connection, as
B Chan
structures do in the Plan 9 kernel.
The
B fid
element is the integer fid used in the 9P
connection.
B Omode
is the mode under which the fid was opened, or
B -1
if this fid has not been opened yet.
Note that in addition to the values
BR OREAD ,
BR OWRITE ,
and
BR ORDWR ,
B omode
can contain the various flags permissible in
an open call.
To ignore the flags, use
BR omode&OMASK .
B Omode
should not be changed by the client.
The fid derives from a successful authentication by
BR uid .
B Qid
contains the qid returned in the last successful
B walk
or
B create
transaction involving the fid.
In a file tree-based server, the
BR Fid 's
B file
element points at a
B File
structure
(see
IR 9pfile (2))
corresponding to the fid.
The
B aux
member is intended for use by the
client to hold information specific to a particular
BR Fid .
With the exception of
BR aux ,
these elements should be treated
as read-only by the client.
PP
I Allocfidpool
creates a new
BR Fidpool .
I Freefidpool
destroys such a pool.
I Allocfid
returns a new
B Fid
whose fid number is
IR fid .
There must not already be an extant
B Fid
with that number in the pool.
Once a
B Fid
has been allocated, it can be looked up by
fid number using
IR lookupfid .
BR Fid s
are reference counted: both
I allocfid
and
I lookupfid
increment the reference count on the
B Fid
structure before
returning.
When a reference to a
B Fid
is no longer needed,
I closefid
should be called to note the destruction of the reference.
When the last reference to a
B Fid
is removed, if
I destroy
(supplied when creating the fid pool)
is not zero, it is called with the
B Fid
as a parameter.
It should perform whatever cleanup is necessary
regarding the
B aux
element.
I Removefid
is equivalent to
I lookupfid
but also removes the
B Fid
from the pool.
Note that due to lingering references,
the return of
I removefid
may not mean that
I destroy
has been called.
PP
IR Allocreqpool ,
IR freereqpool ,
IR allocreq ,
IR lookupreq ,
IR closereq ,
and
I removereq
are analogous but
operate on
BR Reqpool s
and
B Req
structures.
SH SOURCE
B /sys/src/lib9p
SH SEE ALSO
IR 9p (2),
IR 9pfile (2)