]> granicus.if.org Git - libevent/commitdiff
bev_ssl: Be more specific in event callbacks. evhttp in particular gets confused...
authorCatalin Patulea <catalinp@google.com>
Tue, 22 Nov 2011 00:24:50 +0000 (19:24 -0500)
committerNick Mathewson <nickm@torproject.org>
Thu, 24 Nov 2011 17:18:23 +0000 (12:18 -0500)
bufferevent_openssl.c

index 89497fd34defbcd53ca726455c9c96f078f0d9a3..3ca906b7eb9c8d5b3ed5f39060cb54aed69168dd 100644 (file)
@@ -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;
                }
        }