summaryrefslogtreecommitdiff
path: root/bufferevent_openssl.c
diff options
context:
space:
mode:
authorCatalin Patulea <catalinp@google.com>2011-11-21 19:24:50 -0500
committerNick Mathewson <nickm@torproject.org>2011-11-24 12:18:23 -0500
commitf7eb69ace48d780a8e1b3001b2210596533d5f0a (patch)
tree6a5d4897887e6a549445673b4d7377494f5ebe56 /bufferevent_openssl.c
parent3596a31d6376f2ac0740d37f9fdc27f0b4a2f76d (diff)
downloadlibevent-f7eb69ace48d780a8e1b3001b2210596533d5f0a.tar.gz
bev_ssl: Be more specific in event callbacks. evhttp in particular gets confused without at least one of BEV_EVENT_{READING|WRITING}.
Diffstat (limited to 'bufferevent_openssl.c')
-rw-r--r--bufferevent_openssl.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/bufferevent_openssl.c b/bufferevent_openssl.c
index 89497fd3..3ca906b7 100644
--- a/bufferevent_openssl.c
+++ b/bufferevent_openssl.c
@@ -483,7 +483,7 @@ clear_wbor(struct bufferevent_openssl *bev_ssl)
}
static void
-conn_closed(struct bufferevent_openssl *bev_ssl, int errcode, int ret)
+conn_closed(struct bufferevent_openssl *bev_ssl, int when, int errcode, int ret)
{
int event = BEV_EVENT_ERROR;
int dirty_shutdown = 0;
@@ -529,6 +529,8 @@ conn_closed(struct bufferevent_openssl *bev_ssl, int errcode, int ret)
stop_reading(bev_ssl);
stop_writing(bev_ssl);
+ /* when is BEV_EVENT_{READING|WRITING} */
+ event = when | event;
_bufferevent_run_eventcb(&bev_ssl->bev.bev, event);
}
@@ -604,7 +606,7 @@ do_read(struct bufferevent_openssl *bev_ssl, int n_to_read)
return -1;
break;
default:
- conn_closed(bev_ssl, err, r);
+ conn_closed(bev_ssl, BEV_EVENT_READING, err, r);
break;
}
blocked = 1;
@@ -682,7 +684,7 @@ do_write(struct bufferevent_openssl *bev_ssl, int atmost)
bev_ssl->last_write = space[i].iov_len;
break;
default:
- conn_closed(bev_ssl, err, r);
+ conn_closed(bev_ssl, BEV_EVENT_WRITING, err, r);
bev_ssl->last_write = -1;
break;
}
@@ -979,7 +981,7 @@ do_handshake(struct bufferevent_openssl *bev_ssl)
}
return 0;
default:
- conn_closed(bev_ssl, err, r);
+ conn_closed(bev_ssl, BEV_EVENT_READING, err, r);
return -1;
}
}