chiark
/
gitweb
/
~mdw
/
mLib
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Tidying and bugfixing.
[mLib]
/
sel.c
diff --git
a/sel.c
b/sel.c
index 1e3cdaca40921c42e0663a634ad46c5f85d7a666..474e820060035e4444237187bcb846f92b3433f6 100644
(file)
--- a/
sel.c
+++ b/
sel.c
@@
-1,6
+1,6
@@
/* -*-c-*-
*
/* -*-c-*-
*
- * $Id: sel.c,v 1.1
0 2001/06/22 19:35:58
mdw Exp $
+ * $Id: sel.c,v 1.1
1 2003/05/17 10:34:04
mdw Exp $
*
* I/O multiplexing support
*
*
* I/O multiplexing support
*
@@
-30,6
+30,9
@@
/*----- Revision history --------------------------------------------------*
*
* $Log: sel.c,v $
/*----- Revision history --------------------------------------------------*
*
* $Log: sel.c,v $
+ * Revision 1.11 2003/05/17 10:34:04 mdw
+ * Tidying and bugfixing.
+ *
* Revision 1.10 2001/06/22 19:35:58 mdw
* Fix a large number of bugs.
*
* Revision 1.10 2001/06/22 19:35:58 mdw
* Fix a large number of bugs.
*
@@
-161,9
+164,9
@@
void sel_addfile(sel_file *f)
while (*ff && (*ff)->fd > f->fd)
ff = &(*ff)->next;
f->next = *ff;
while (*ff && (*ff)->fd > f->fd)
ff = &(*ff)->next;
f->next = *ff;
- f->prev =
(sel_file *)
ff;
+ f->prev = ff;
if (*ff)
if (*ff)
- (*ff)->prev =
f
;
+ (*ff)->prev =
&f->next
;
*ff = f;
FD_SET(f->fd, f->s->fd + f->mode);
}
*ff = f;
FD_SET(f->fd, f->s->fd + f->mode);
}
@@
-197,7
+200,7
@@
void sel_force(sel_file *f)
void sel_rmfile(sel_file *f)
{
void sel_rmfile(sel_file *f)
{
-
f->prev->next
= f->next;
+
*f->prev
= f->next;
if (f->next)
f->next->prev = f->prev;
FD_CLR(f->fd, f->s->fd + f->mode);
if (f->next)
f->next->prev = f->prev;
FD_CLR(f->fd, f->s->fd + f->mode);
@@
-240,9
+243,9
@@
void sel_addtimer(sel_state *s, sel_timer *t,
while (*tt && TV_CMP(&(*tt)->tv, <, tv))
tt = &(*tt)->next;
t->next = *tt;
while (*tt && TV_CMP(&(*tt)->tv, <, tv))
tt = &(*tt)->next;
t->next = *tt;
- t->prev =
(sel_timer *)
tt;
+ t->prev = tt;
if (*tt)
if (*tt)
- (*tt)->prev = t;
+ (*tt)->prev =
&t->nex
t;
*tt = t;
}
*tt = t;
}
@@
-257,12
+260,13
@@
void sel_addtimer(sel_state *s, sel_timer *t,
void sel_rmtimer(sel_timer *t)
{
void sel_rmtimer(sel_timer *t)
{
- t->prev->next = t->next;
- if (t->next)
- t->next->prev = t->prev;
if (t->pend) {
t->pend->t = 0;
t->pend = 0;
if (t->pend) {
t->pend->t = 0;
t->pend = 0;
+ } else {
+ *t->prev = t->next;
+ if (t->next)
+ t->next->prev = t->prev;
}
}
}
}
@@
-286,9
+290,9
@@
void sel_addhook(sel_state *s, sel_hook *h,
h->after = after;
h->p = p;
h->next = s->hooks;
h->after = after;
h->p = p;
h->next = s->hooks;
- h->prev =
(sel_hook *)
&s->hooks;
+ h->prev = &s->hooks;
if (s->hooks)
if (s->hooks)
- s->hooks->prev =
h
;
+ s->hooks->prev =
&h->next
;
s->hooks = h;
}
s->hooks = h;
}
@@
-305,7
+309,7
@@
void sel_rmhook(sel_hook *h)
{
if (h->next)
h->next->prev = h->prev;
{
if (h->next)
h->next->prev = h->prev;
-
h->prev->next
= h->next;
+
*h->prev
= h->next;
}
/* --- @sel_fdmerge@ --- *
}
/* --- @sel_fdmerge@ --- *
@@
-426,8
+430,8
@@
int sel_select(sel_state *s)
}
*ptt = 0;
if (t) {
}
*ptt = 0;
if (t) {
-
t->prev->next
= 0;
- t->prev =
(sel_timer *)
&s->timers;
+
*t->prev
= 0;
+ t->prev = &s->timers;
}
s->timers = t;
while (pthead) {
}
s->timers = t;
while (pthead) {
@@
-435,8
+439,10
@@
int sel_select(sel_state *s)
pthead = pt->next;
t = pt->t;
if (t) {
pthead = pt->next;
t = pt->t;
if (t) {
- t->func(&a.now, t->p);
t->pend = 0;
t->pend = 0;
+ t->next = 0;
+ t->prev = &t->next;
+ t->func(&a.now, t->p);
}
DESTROY(pt);
}
}
DESTROY(pt);
}
@@
-471,8
+477,8
@@
int sel_select(sel_state *s)
pfhead = pf->next;
f = pf->f;
if (f) {
pfhead = pf->next;
f = pf->f;
if (f) {
- f->func(f->fd, i, f->p);
f->pend = 0;
f->pend = 0;
+ f->func(f->fd, i, f->p);
}
}
}
}
}
}