]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/include/9p.h
libc, seconds: new time and date apis (try 2)
[plan9front.git] / sys / include / 9p.h
index 85e2304ba91af867fa2af6fb5cf48f2b431296ba..949476232cb1fae5b109a9471d52565f38b03863 100644 (file)
@@ -27,10 +27,27 @@ typedef struct Filelist     Filelist;
 typedef struct Tree            Tree;
 typedef struct Readdir Readdir;
 typedef struct Srv Srv;
+typedef struct Reqqueue Reqqueue;
+typedef struct Queueelem Queueelem;
 
 #pragma incomplete Filelist
 #pragma incomplete Readdir
 
+struct Queueelem
+{
+       Queueelem *prev, *next;
+       void (*f)(Req *);
+};
+
+struct Reqqueue
+{
+       QLock;
+       Rendez;
+       Queueelem;
+       int pid, flush;
+       Req *cur;
+};
+
 struct Fid
 {
        ulong   fid;
@@ -60,6 +77,8 @@ struct Req
        Fid*            afid;
        Fid*            newfid;
        Srv*            srv;
+       
+       Queueelem qu;
 
 /* below is implementation-specific; don't use */
        QLock   lk;
@@ -133,7 +152,6 @@ struct Tree {
 /* below is implementation-specific; don't use */
        Lock genlock;
        ulong qidgen;
-       ulong dirqidgen;
 };
 
 Tree*  alloctree(char*, char*, ulong, void(*destroy)(File*));
@@ -143,7 +161,7 @@ int         removefile(File*);
 void           closefile(File*);
 File*          walkfile(File*, char*);
 Readdir*       opendirfile(File*);
-long           readdirfile(Readdir*, uchar*, long);
+long           readdirfile(Readdir*, uchar*, long, long);
 void           closedirfile(Readdir*);
 
 /*
@@ -176,6 +194,7 @@ struct Srv {
        Tree*   tree;
        void            (*destroyfid)(Fid*);
        void            (*destroyreq)(Req*);
+       void            (*start)(Srv*);
        void            (*end)(Srv*);
        void*   aux;
 
@@ -195,9 +214,7 @@ struct Srv {
 
        int             infd;
        int             outfd;
-       int             nopipe;
        int             srvfd;
-       int             leavefdsopen;   /* magic for acme win */
        char*   keyspec;
 
 /* below is implementation-specific; don't use */
@@ -211,6 +228,14 @@ struct Srv {
        QLock   wlock;
        
        char*   addr;
+
+       QLock   slock;
+       Ref     sref;   /* srvwork procs */
+       Ref     rref;   /* requests in flight */
+
+       int     spid;   /* pid of srv() caller */
+
+       void    (*free)(Srv*);
 };
 
 void           srv(Srv*);
@@ -220,8 +245,6 @@ void                postsharesrv(Srv*, char*, char*, char*);
 void           _postsharesrv(Srv*, char*, char*, char*);
 void           listensrv(Srv*, char*);
 void           _listensrv(Srv*, char*);
-int            postfd(char*, int);
-int            sharefd(char*, char*, int);
 int            chatty9p;
 void           respond(Req*, char*);
 void           responderror(Req*);
@@ -255,3 +278,10 @@ int                authattach(Req*);
 
 extern void (*_forker)(void (*)(void*), void*, int);
 
+void           srvacquire(Srv *);
+void           srvrelease(Srv *);
+
+Reqqueue*      reqqueuecreate(void);
+void           reqqueuepush(Reqqueue*, Req*, void (*)(Req *));
+void           reqqueueflush(Reqqueue*, Req*);
+void           reqqueuefree(Reqqueue*);