Skip to content
Snippets Groups Projects
  1. Jun 13, 2012
    • Nick Mathewson's avatar
      Add changes file for bug5263 · 9c588730
      Nick Mathewson authored
      9c588730
    • Nick Mathewson's avatar
      Add rate-limited log message to bug5263 fix · 9282c889
      Nick Mathewson authored
      Initially I said, "I claim that we shouldn't be reading and marked;
      let's see if I'm right."  But Rob finds that it does.
      9282c889
    • Rob Jansen's avatar
      Fix busy Libevent loops (infinite loops in Shadow) · 03b48352
      Rob Jansen authored and Nick Mathewson's avatar Nick Mathewson committed
      There is a bug causing busy loops in Libevent and infinite loops in
      the Shadow simulator. A connection that is marked for close, wants
      to flush, is held open to flush, but is rate limited (the token
      bucket is empty) triggers the bug.
      
      This commit fixes the bug. Details are below.
      
      This currently happens on read and write callbacks when the active
      socket is marked for close. In this case, Tor doesn't actually try
      to complete the read or write (it returns from those methods when
      marked), but instead tries to clear the connection with
      conn_close_if_marked(). Tor will not close a marked connection that
      contains data: it must be flushed first. The bug occurs when this
      flush operation on the marked connection can not occur because the
      connection is rate-limited (its write token bucket is empty).
      
      The fix is to detect when rate limiting is preventing a marked
      connection from properly flushing. In this case, it should be
      flagged as read/write_blocked_on_bandwidth and the read/write events
      de-registered from Libevent. When the token bucket gets refilled, it
      will check the associated read/write_blocked_on_bandwidth flag, and
      add the read/write event back to Libevent, which will cause it to
      fire. This time, it will be properly flushed and closed.
      
      The reason that both read and write events are both de-registered
      when the marked connection can not flush is because both result in
      the same behavior. Both read/write events on marked connections will
      never again do any actual reads/writes, and are only useful to
      trigger the flush and close the connection. By setting the
      associated read/write_blocked_on_bandwidth flag, we ensure that the
      event will get added back to Libevent, properly flushed, and closed.
      
      Why is this important? Every Shadow event occurs at a discrete time
      instant. If Tor does not properly deregister Libevent events that
      fire but result in Tor essentially doing nothing, Libevent will
      repeatedly fire the event. In Shadow this means infinite loop,
      outside of Shadow this means wasted CPU cycles.
      03b48352
  2. Jun 12, 2012
  3. Jun 11, 2012
  4. Jun 09, 2012
  5. Jun 08, 2012
  6. Jun 07, 2012
  7. Jun 06, 2012
    • Nick Mathewson's avatar
      Change the default for DynamicDHGroups to 0 · 8a341cc4
      Nick Mathewson authored
      This feature can make Tor relays less identifiable by their use of the
      mod_ssl DH group, but at the cost of some usability (#4721) and bridge
      tracing (#6087) regressions.
      
      We should try to turn this on by default again if we find that the
      mod_ssl group is uncommon and/or we move to a different DH group size
      (see #6088).  Before we can do so, we need a fix for bugs #6087 and
      
      Resolves ticket #5598 for now.
      8a341cc4
    • Roger Dingledine's avatar
      0ee13dc2
  8. Jun 05, 2012
Loading