]> granicus.if.org Git - libevent/commitdiff
Merge remote-tracking branch 'origin/patches-2.0'
authorNick Mathewson <nickm@torproject.org>
Thu, 25 Oct 2012 02:55:17 +0000 (22:55 -0400)
committerNick Mathewson <nickm@torproject.org>
Thu, 25 Oct 2012 02:55:17 +0000 (22:55 -0400)
Conflicts:
bufferevent_openssl.c

1  2 
bufferevent_openssl.c
bufferevent_sock.c

index 6e9c99f861c16b8b33999974731c4f0f839e262c,e01909ec9566c26397993c06e5e8477d5f90923e..2f07cb6bfd0c3b67359b29eaf409e476c881a899
@@@ -933,26 -930,28 +933,28 @@@ static voi
  be_openssl_readeventcb(evutil_socket_t fd, short what, void *ptr)
  {
        struct bufferevent_openssl *bev_ssl = ptr;
 -      _bufferevent_incref_and_lock(&bev_ssl->bev.bev);
 +      bufferevent_incref_and_lock_(&bev_ssl->bev.bev);
-       if (what & EV_TIMEOUT) {
+       if (what == EV_TIMEOUT) {
 -              _bufferevent_run_eventcb(&bev_ssl->bev.bev,
 +              bufferevent_run_eventcb_(&bev_ssl->bev.bev,
                    BEV_EVENT_TIMEOUT|BEV_EVENT_READING);
-       } else
+       } else {
                consider_reading(bev_ssl);
 -      _bufferevent_decref_and_unlock(&bev_ssl->bev.bev);
+       }
 +      bufferevent_decref_and_unlock_(&bev_ssl->bev.bev);
  }
  
  static void
  be_openssl_writeeventcb(evutil_socket_t fd, short what, void *ptr)
  {
        struct bufferevent_openssl *bev_ssl = ptr;
 -      _bufferevent_incref_and_lock(&bev_ssl->bev.bev);
 +      bufferevent_incref_and_lock_(&bev_ssl->bev.bev);
-       if (what & EV_TIMEOUT) {
+       if (what == EV_TIMEOUT) {
 -              _bufferevent_run_eventcb(&bev_ssl->bev.bev,
 +              bufferevent_run_eventcb_(&bev_ssl->bev.bev,
                    BEV_EVENT_TIMEOUT|BEV_EVENT_WRITING);
+       } else {
+               consider_writing(bev_ssl);
        }
-       consider_writing(bev_ssl);
 -      _bufferevent_decref_and_unlock(&bev_ssl->bev.bev);
 +      bufferevent_decref_and_unlock_(&bev_ssl->bev.bev);
  }
  
  static int
index e1fcadc6d405c8a7fd3d1495a57e4f3ff7d229f3,19e90d5a9d6dc90b913c629e0e4aed3d9d790e9b..eaaf9414e8c07c2b96b9d4f2fa584004fddc856c
@@@ -131,9 -130,12 +131,12 @@@ bufferevent_readcb(evutil_socket_t fd, 
        short what = BEV_EVENT_READING;
        ev_ssize_t howmuch = -1, readmax=-1;
  
 -      _bufferevent_incref_and_lock(bufev);
 +      bufferevent_incref_and_lock_(bufev);
  
        if (event == EV_TIMEOUT) {
+               /* Note that we only check for event==EV_TIMEOUT. If
+                * event==EV_TIMEOUT|EV_READ, we can safely ignore the
+                * timeout, since a read has occurred */
                what |= BEV_EVENT_TIMEOUT;
                goto error;
        }
@@@ -207,9 -209,12 +210,12 @@@ bufferevent_writecb(evutil_socket_t fd
        int connected = 0;
        ev_ssize_t atmost = -1;
  
 -      _bufferevent_incref_and_lock(bufev);
 +      bufferevent_incref_and_lock_(bufev);
  
        if (event == EV_TIMEOUT) {
+               /* Note that we only check for event==EV_TIMEOUT. If
+                * event==EV_TIMEOUT|EV_WRITE, we can safely ignore the
+                * timeout, since a read has occurred */
                what |= BEV_EVENT_TIMEOUT;
                goto error;
        }