]> granicus.if.org Git - libevent/commitdiff
Merge remote-tracking branch 'origin/patches-2.0'
authorNick Mathewson <nickm@torproject.org>
Thu, 23 Aug 2012 14:13:26 +0000 (10:13 -0400)
committerNick Mathewson <nickm@torproject.org>
Thu, 23 Aug 2012 14:13:26 +0000 (10:13 -0400)
1  2 
bufferevent_openssl.c

index 33f7d3799bf179f2ffebfc25dbc85aac8d314d3b,fdbec28015aafab252c397766925e89ca064962d..681aecff34fc84858ff66a8977078fc4feaf92e7
@@@ -566,10 -567,11 +570,11 @@@ do_read(struct bufferevent_openssl *bev
        /* Requires lock */
        struct bufferevent *bev = &bev_ssl->bev.bev;
        struct evbuffer *input = bev->input;
-       int r, n, i, n_used = 0, blocked = 0, atmost;
+       int r, n, i, n_used = 0, atmost;
        struct evbuffer_iovec space[2];
+       int result = 0;
  
 -      atmost = _bufferevent_get_read_max(&bev_ssl->bev);
 +      atmost = bufferevent_get_read_max_(&bev_ssl->bev);
        if (n_to_read > atmost)
                n_to_read = atmost;
  
                                 * underlying is full */
                                if (!bev_ssl->read_blocked_on_write)
                                        if (set_rbow(bev_ssl) < 0)
-                                               return -1;
+                                               return OP_ERR | result;
                                break;
                        default:
 -                              conn_closed(bev_ssl, err, r);
 +                              conn_closed(bev_ssl, BEV_EVENT_READING, err, r);
                                break;
                        }
-                       blocked = 1;
+                       result |= OP_BLOCKED;
                        break; /* out of the loop */
                }
        }
@@@ -695,9 -702,9 +705,9 @@@ do_write(struct bufferevent_openssl *be
                        BEV_RESET_GENERIC_WRITE_TIMEOUT(bev);
  
                if (evbuffer_get_length(output) <= bev->wm_write.low)
 -                      _bufferevent_run_writecb(bev);
 +                      bufferevent_run_writecb_(bev);
        }
-       return blocked ? 0 : 1;
+       return result;
  }
  
  #define WRITE_FRAME 15000
@@@ -838,9 -844,11 +847,11 @@@ consider_writing(struct bufferevent_ope
                        struct evbuffer *input = bev->input;
  
                        if (evbuffer_get_length(input) >= bev->wm_read.low) {
 -                              _bufferevent_run_readcb(bev);
 +                              bufferevent_run_readcb_(bev);
                        }
                }
+               if (r & (OP_ERR|OP_BLOCKED))
+                       break;
        }
        if (bev_ssl->read_blocked_on_write)
                return;