1. 22 1月, 2016 4 次提交
  2. 18 12月, 2015 2 次提交
  3. 17 12月, 2015 1 次提交
    • A
      Fix a race that may lead to the active (slave) client to be freed. · e0b7388d
      antirez 提交于
      In issue #2948 a crash was reported in processCommand(). Later Oran Agra
      (@oranagra) traced the bug (in private chat) in the following sequence
      of events:
      
      1. Some maxmemory is set.
      2. The slave is the currently active client and is executing PING or
         REPLCONF or whatever a slave can send to its master.
      3. freeMemoryIfNeeded() is called since maxmemory is set.
      4. flushSlavesOutputBuffers() is called by freeMemoryIfNeeded().
      5. During slaves buffers flush, a write error could be encoutered in
         writeToClient() or sendReplyToClient() depending on the version of
         Redis. This will trigger freeClient() against the currently active
         client, so a segmentation fault will likely happen in
         processCommand() immediately after the call to freeMemoryIfNeeded().
      
      There are different possible fixes:
      
      1. Add flags to writeToClient() (recent versions code base) so that
         we can ignore the write errors, and use this flag in
         flushSlavesOutputBuffers(). However this is not simple to do in older
         versions of Redis.
      2. Use freeClientAsync() during write errors. This works but changes the
         current behavior of releasing clients ASAP when possible. Normally
         we write to clients during the normal event loop processing, in the
         writable client, where there is no active client, so no care must be
         taken.
      3. The fix of this commit: to detect that the current client is no
         longer valid. This fix is a bit "ad-hoc", but works across all the
         versions and has the advantage of not changing the remaining
         behavior. Only alters what happens during this race condition,
         hopefully.
      e0b7388d
  4. 16 12月, 2015 1 次提交
  5. 15 12月, 2015 1 次提交
  6. 12 12月, 2015 2 次提交
  7. 11 12月, 2015 3 次提交
  8. 07 12月, 2015 5 次提交
  9. 03 12月, 2015 14 次提交
  10. 14 11月, 2015 2 次提交
  11. 13 11月, 2015 5 次提交