When running with deferred callbacks, always send the "connected" event

before any read/write events, and send timeout/error/eof events after.

svn:r1413
This commit is contained in:
Nick Mathewson 2009-08-11 19:47:46 +00:00
parent 7a55c48d77
commit bd26bace0d

View File

@ -121,6 +121,13 @@ bufferevent_run_deferred_callbacks(struct deferred_cb *_, void *arg)
/* XXXX It would be better to run these without holding the
* bufferevent lock */
BEV_LOCK(bufev);
if ((bufev_private->eventcb_pending & BEV_EVENT_CONNECTED) &&
bufev->errorcb) {
/* The "connected" happened before any reads or writes, so
send it first. */
bufev_private->eventcb_pending &= ~BEV_EVENT_CONNECTED;
bufev->errorcb(bufev, BEV_EVENT_CONNECTED, bufev->cbarg);
}
if (bufev_private->readcb_pending && bufev->readcb) {
bufev_private->readcb_pending = 0;
bufev->readcb(bufev, bufev->cbarg);