libmemcached: fix pipelining with memcached 1.6
authorMichael Wallner <mike@php.net>
Wed, 19 Aug 2020 14:22:08 +0000 (16:22 +0200)
committerMichael Wallner <mike@php.net>
Wed, 19 Aug 2020 14:22:08 +0000 (16:22 +0200)
src/libmemcached/purge.cc
src/libmemcached/response.cc

index 7f54672ce95e2928ff95eea41cef4e4b8ec50efb..10c133f2686589edda075f08e1249ed0a49b9757 100644 (file)
@@ -62,11 +62,11 @@ private:
 class PollTimeout
 {
 public:
-  PollTimeout(Memcached* arg) :
+  PollTimeout(Memcached* arg, int32_t ms = 50) :
     _timeout(arg->poll_timeout),
     _origin(arg->poll_timeout)
   {
-    _origin = 2000;
+    _origin = ms;
   }
 
   ~PollTimeout()
@@ -135,12 +135,15 @@ bool memcached_purge(memcached_instance_st* ptr)
        * Purge doesn't care for what kind of command results that is received.
        * The only kind of errors I care about if is I'm out of sync with the
        * protocol or have problems reading data from the network..
-     */
+       */
       if (rc== MEMCACHED_PROTOCOL_ERROR or rc == MEMCACHED_UNKNOWN_READ_FAILURE or rc == MEMCACHED_READ_FAILURE)
       {
         WATCHPOINT_ERROR(rc);
         is_successful= false;
       }
+      if (rc == MEMCACHED_TIMEOUT) {
+        break;
+      }
 
       if (ptr->root->callbacks != NULL)
       {
index d2e2603f94682fc0d65ca2af6cda8a775a547584..8c4eb988b4fdf52fca591e9154a9a801f9eafdc2 100644 (file)
@@ -858,7 +858,7 @@ static memcached_return_t _read_one_response(memcached_instance_st* instance,
     rc= textual_read_one_response(instance, buffer, buffer_length, result);
   }
 
-  if (memcached_fatal(rc))
+  if (memcached_fatal(rc) && rc != MEMCACHED_TIMEOUT)
   {
     memcached_io_reset(instance);
   }