summaryrefslogtreecommitdiff
path: root/sys/src/libdraw/event.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2013-08-11 08:31:53 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2013-08-11 08:31:53 +0200
commit09d465a9761be085b697b4ec342f5022469eb29a (patch)
tree52dd1a6707489de0cf4b3ac00aa79af73a62f4b5 /sys/src/libdraw/event.c
parent62bd2ae8b910b56dd6cbc50c4d9573e2eac6f1ad (diff)
libdraw: make ebread() return buffer immidiately if available, cleanup
this reduces number of syscalls and improves performance for vt
Diffstat (limited to 'sys/src/libdraw/event.c')
-rw-r--r--sys/src/libdraw/event.c22
1 files changed, 6 insertions, 16 deletions
diff --git a/sys/src/libdraw/event.c b/sys/src/libdraw/event.c
index 5df6e63a8..bb4b60179 100644
--- a/sys/src/libdraw/event.c
+++ b/sys/src/libdraw/event.c
@@ -45,21 +45,10 @@ Ebuf*
ebread(Slave *s)
{
Ebuf *eb;
- Dir *d;
- ulong l;
-
- for(;;){
- d = dirfstat(epipe[0]);
- if(d == nil)
- drawerror(display, "events: eread stat error");
- l = d->length;
- free(d);
- if(s->head && l==0)
- break;
+
+ while((eb = s->head) == 0)
extract();
- }
- eb = s->head;
- s->head = s->head->next;
+ s->head = eb->next;
if(s->head == 0)
s->tail = 0;
return eb;
@@ -322,9 +311,10 @@ loop:
memmove(eb->buf, &ebuf[1], n - 1);
eb->next = 0;
if(s->head)
- s->tail = s->tail->next = eb;
+ s->tail->next = eb;
else
- s->head = s->tail = eb;
+ s->head = eb;
+ s->tail = eb;
}
static int