merge
This commit is contained in:
commit
2f99484b9d
|
@ -287,3 +287,4 @@ void srvrelease(Srv *);
|
||||||
Reqqueue* reqqueuecreate(void);
|
Reqqueue* reqqueuecreate(void);
|
||||||
void reqqueuepush(Reqqueue*, Req*, void (*)(Req *));
|
void reqqueuepush(Reqqueue*, Req*, void (*)(Req *));
|
||||||
void reqqueueflush(Reqqueue*, Req*);
|
void reqqueueflush(Reqqueue*, Req*);
|
||||||
|
void reqqueuefree(Reqqueue*);
|
||||||
|
|
|
@ -29,6 +29,7 @@ struct Reqqueue
|
||||||
Reqqueue* reqqueuecreate(void);
|
Reqqueue* reqqueuecreate(void);
|
||||||
void reqqueuepush(Reqqueue *q, Req *r, void (*f)(Req *));
|
void reqqueuepush(Reqqueue *q, Req *r, void (*f)(Req *));
|
||||||
void reqqueueflush(Reqqueue *q, Req *r);
|
void reqqueueflush(Reqqueue *q, Req *r);
|
||||||
|
void reqqueuefree(Reqqueue *q);
|
||||||
.fi
|
.fi
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
.I Reqqueue
|
.I Reqqueue
|
||||||
|
@ -55,6 +56,10 @@ by
|
||||||
which will remove the request immediately if processing has
|
which will remove the request immediately if processing has
|
||||||
not started. If processing has been started, the process
|
not started. If processing has been started, the process
|
||||||
will be interrupted.
|
will be interrupted.
|
||||||
|
.PP
|
||||||
|
.I Reqqueuefree
|
||||||
|
frees a queue.
|
||||||
|
No new requests should be send to the queue and it will be freed once all requests in it have been processed.
|
||||||
.SH SOURCE
|
.SH SOURCE
|
||||||
.B /sys/src/lib9p/queue.c
|
.B /sys/src/lib9p/queue.c
|
||||||
.SH SEE ALSO
|
.SH SEE ALSO
|
||||||
|
|
|
@ -35,8 +35,14 @@ _reqqueueproc(void *v)
|
||||||
memset(&r->qu, 0, sizeof(r->qu));
|
memset(&r->qu, 0, sizeof(r->qu));
|
||||||
q->cur = r;
|
q->cur = r;
|
||||||
qunlock(q);
|
qunlock(q);
|
||||||
|
if(f == nil)
|
||||||
|
break;
|
||||||
f(r);
|
f(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(r);
|
||||||
|
free(q);
|
||||||
|
threadexits(nil);
|
||||||
}
|
}
|
||||||
|
|
||||||
Reqqueue *
|
Reqqueue *
|
||||||
|
@ -83,3 +89,14 @@ reqqueueflush(Reqqueue *q, Req *r)
|
||||||
respond(r, "interrupted");
|
respond(r, "interrupted");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
reqqueuefree(Reqqueue *q)
|
||||||
|
{
|
||||||
|
Req *r;
|
||||||
|
|
||||||
|
if(q == nil)
|
||||||
|
return;
|
||||||
|
r = emalloc9p(sizeof(Req));
|
||||||
|
reqqueuepush(q, r, nil);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue