Hi,
while reading some code which used buffered events, i saw that
you really have to define callbacks for read, write and error,
even if you do not care about one of them.
Is there a reason for that?
This ends up in ugly code, defining empty functions as callbacks.
The problem is, that bufferevent_new enables EV_WRITE and
EV_READ regardless of beeing defined not NULL. (On OpenBSD only
EV_WRITE currently)
If there is no reason for that, i would suggest to apply the
following diff. It fixes the problem for me. :)
Thanks for the great work Niels.
So long...
/dev/rainer
--- evbuffer.c 2005-04-20 00:55:45.000000000 +0200
+++ ../evbuffer.c 2006-07-27 20:59:44.000000000 +0200
@@ -136,7 +136,8 @@
return;
error:
- (*bufev->errorcb)(bufev, what, bufev->cbarg);
+ if (*bufev->errorcb != NULL)
+ (*bufev->errorcb)(bufev, what, bufev->cbarg);
}
static void
@@ -186,7 +187,8 @@
return;
error:
- (*bufev->errorcb)(bufev, what, bufev->cbarg);
+ if (*bufev->errorcb != NULL)
+ (*bufev->errorcb)(bufev, what, bufev->cbarg);
}
/*
@@ -217,8 +219,15 @@
return (NULL);
}
- event_set(&bufev->ev_read, fd, EV_READ, bufferevent_readcb, bufev);
- event_set(&bufev->ev_write, fd, EV_WRITE, bufferevent_writecb, bufev);
+ if (readcb != NULL) {
+ event_set(&bufev->ev_read, fd, EV_READ, bufferevent_readcb,
bufev);
+ bufev->enabled = EV_READ;
+ }
+
+ if (writecb != NULL) {
+ event_set(&bufev->ev_write, fd, EV_WRITE, bufferevent_writecb,
bufev);
+ bufev->enabled = EV_WRITE;
+ }
bufev->readcb = readcb;
bufev->writecb = writecb;
@@ -226,8 +235,6 @@
bufev->cbarg = cbarg;
- bufev->enabled = EV_READ | EV_WRITE;
-
return (bufev);
}
_______________________________________________
Libevent-users mailing list
[email protected]
http://monkey.org/mailman/listinfo/libevent-users