From f7eb69ace48d780a8e1b3001b2210596533d5f0a Mon Sep 17 00:00:00 2001 From: Catalin Patulea Date: Mon, 21 Nov 2011 19:24:50 -0500 Subject: bev_ssl: Be more specific in event callbacks. evhttp in particular gets confused without at least one of BEV_EVENT_{READING|WRITING}. --- bufferevent_openssl.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'bufferevent_openssl.c') 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; } } -- cgit v1.2.1