1. 28 Jan, 2022 1 commit
    • Bjorn Svensson's avatar
      Avoid incorrect call to the previous reply's callback (#1040) · be41ed60
      Bjorn Svensson authored
      * No reuse of the previous reply callback
      
      When multiple replies are parsed from a socket in one read
      a previously found callback might get reused when the current
      reply has no known callback.
      
      This can be triggered by the added testcase which unsubscribe to
      subscribed (A,B) and a non-subscribed channel (X).
      Without this correction a callback for wrong channel is called.
      -  In 'unsubscribe B X A', B's callback is called when handling X.
      -  Now this is not done, i.e. there is no callback called for X.
      
      * Re-push monitor callback for each reply
      
      MONITORING used the same callback for all replies while parsing
      multiple responses. This handling was changed to avoid calling
      the wrong callback in some scenarios.
      Now also change monitorings repush to work with this change.
      
      Includes an added async monitoring testcase.
      be41ed60
  2. 18 Jan, 2022 1 commit
    • Bjorn Svensson's avatar
      Allow sending commands after sending an unsubscribe (#1036) · f2ce5980
      Bjorn Svensson authored
      * Add test of async commands after unsubscribe
      
      Verify that commands are handled after unsubscribing from a channel.
      A command is sent before the `unsubscribe` response is received,
      which currently triggers an assert in async.c:567:
      
      `redisProcessCallbacks: Assertion `(c->flags & REDIS_SUBSCRIBED || c->flags & REDIS_MONITORING)' failed.`
      
      * Handle async commands after an unsubscribe
      
      When unsubscribing from the last channel we move from the `subscribe`
      state to a normal state. These states uses different holders for the
      command callback information.
      By moving the callback info during the state change the callback order
      can be maintained.
      f2ce5980
  3. 11 Jan, 2022 1 commit
    • Bjorn Svensson's avatar
      Correction for command timeout during pubsub (#1038) · ff860e55
      Bjorn Svensson authored
      * Add test of command timeout during pubsub
      
      A timeout of a non-subscribe command will be ignored during pubsub.
      It will be handled as an idle timeout and a response is awaited for.
      
      * Correction for command timeout during pubsub
      
      Disconnect when a sent non-subscribe command triggers a timeout.
      ff860e55
  4. 22 Dec, 2021 2 commits
  5. 16 Dec, 2021 1 commit
    • Bjorn Svensson's avatar
      Support PING while subscribing (RESP2) (#1027) · d3384260
      Bjorn Svensson authored
      * Handle PING during pubsub in RESP2
      
      * Rename invalid callback list
      
      Some commands are valid to send during a subscribe in RESP2, and
      most in RESP3. Renaming the callback list from `invalid` to `replies`
      to detail this fact.
      
      * Fix review comment
      d3384260
  6. 01 Dec, 2021 1 commit
    • Bjorn Svensson's avatar
      Add asynchronous test for pubsub using RESP3 (#1012) · da5a4ff3
      Bjorn Svensson authored
      * Include `unsubscribe` as a subscribe reply in RESP3
      
      By providing the (p)unsubscribe message via the subscribe callback,
      instead of via the push callback, we get the same behavior in RESP3
      as in RESP2.
      
      * Add asynchronous test for pubsub using RESP3
      
      The testcase will subscribe to a channel, and via a second client
      a message is published to the channel. After receiving the message
      the testcase will unsubscribe and disconnect.
      
      This RESP3 testcase reuses the subscribe callback from the RESP2
      testcase to make sure we have a common behavior.
      da5a4ff3
  7. 11 Jul, 2021 1 commit
  8. 17 Jun, 2021 1 commit
  9. 08 Apr, 2021 1 commit
  10. 26 Jan, 2021 1 commit
  11. 25 Jan, 2021 1 commit
    • Bjorn Svensson's avatar
      Stack allocate dict iterators · 920128a2
      Bjorn Svensson authored
      Replacing the get & release functions with an initiation
      function. Simplifies the code and will make sure we
      run subscription callbacks in OOM scenarios.
      920128a2
  12. 23 Sep, 2020 1 commit
  13. 31 Jul, 2020 1 commit
  14. 26 Jul, 2020 1 commit
  15. 20 Jul, 2020 1 commit
    • Michael Grunder's avatar
      Resp3 oob push support (#841) · 2e7d7cba
      Michael Grunder authored
      Proper support for RESP3 PUSH messages.
      
      By default, PUSH messages are now intercepted and the reply memory freed.  
      This means existing code should work unchanged when connecting to Redis
      >= 6.0.0 even if `CLIENT TRACKING` were then enabled.
      
      Additionally, we define two callbacks users can configure if they wish to handle
      these messages in a custom way:
      
      void redisPushFn(void *privdata, void *reply);
      void redisAsyncPushFn(redisAsyncContext *ac, void *reply);
      
      See #825
      2e7d7cba
  16. 22 Jun, 2020 1 commit
  17. 22 May, 2020 1 commit
    • Michael Grunder's avatar
      Allow users to replace allocator and handle OOM everywhere. (#800) · 8e0264cf
      Michael Grunder authored
      * Adds an indirection to every allocation/deallocation to allow users to 
        plug in ones of their choosing (use custom functions, jemalloc, etc).
      
      * Gracefully handle OOM everywhere in hiredis.  This should make it possible
        for users of the library to have more flexibility in how they handle such situations.
      
      * Changes `redisReaderTask->elements` from an `int` to a `long long` to prevent
        a possible overflow when transferring the task elements into a `redisReply`.
      
      * Adds a configurable `max elements` member to `redisReader` that defaults to
        2^32 - 1.  This can be set to "unlimited" by setting the value to zero.
      8e0264cf
  18. 21 May, 2020 1 commit
  19. 10 Apr, 2020 1 commit
  20. 28 Jan, 2020 1 commit
  21. 29 Aug, 2019 1 commit
  22. 09 Aug, 2019 1 commit
    • Marcus Geelnard's avatar
      MinGW fix: Use _MSC_VER instead of _WIN32 where appropriate · 85fee256
      Marcus Geelnard authored
      Use _MSC_VER (instead of _WIN32) for things that are specific for
      Visual Studio.
      
      Also remove #include <winsock2.h> from hiredis.h, as it leaks too
      many symbols and defines into the global namespace, which is
      undesirable for a public interface header. Anyone who uses the
      the affected parts of the hiredis API needs to include the
      appropriate headers anyway in order to declare struct timeval
      variables.
      85fee256
  23. 22 Jul, 2019 1 commit
  24. 13 Apr, 2019 1 commit
  25. 11 Mar, 2019 1 commit
  26. 21 Feb, 2019 1 commit
  27. 20 Feb, 2019 5 commits
  28. 26 Sep, 2018 2 commits
  29. 15 Jun, 2017 1 commit
  30. 15 May, 2017 1 commit
  31. 30 Jan, 2017 2 commits
  32. 29 Sep, 2016 1 commit
  33. 27 Oct, 2015 1 commit