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 Libevent-users@monkey.org http://monkey.org/mailman/listinfo/libevent-users