@@ -2605,19 +2605,20 @@ PHP_METHOD(Redis, multi)
26052605    }
26062606
26072607    if  (multi_value  ==  PIPELINE ) {
2608-         IF_PIPELINE () {
2609-             php_error_docref (NULL  TSRMLS_CC , E_WARNING , "Already in pipeline mode" );
2610-         } else  IF_MULTI () {
2608+         /* Cannot enter pipeline mode in a MULTI block */ 
2609+         IF_MULTI () {
26112610            php_error_docref (NULL  TSRMLS_CC , E_ERROR , "Can 't activate pipeline in multi mode!");
26122611            RETURN_FALSE ;
2613-         } else  {
2612+         }
2613+ 
2614+         /* Enable PIPELINE if we're not already in one */ 
2615+         IF_ATOMIC () {
26142616            free_reply_callbacks (redis_sock );
26152617            REDIS_ENABLE_MODE (redis_sock , PIPELINE );
26162618        }
26172619    } else  if  (multi_value  ==  MULTI ) {
2618-         IF_MULTI () {
2619-             php_error_docref (NULL  TSRMLS_CC , E_WARNING , "Already in multi mode" );
2620-         } else  {
2620+         /* Don't want to do anything if we're alredy in MULTI mode */ 
2621+         IF_NOT_MULTI () {
26212622            cmd_len  =  REDIS_SPPRINTF (& cmd , "MULTI" , "" );
26222623            IF_PIPELINE () {
26232624                PIPELINE_ENQUEUE_COMMAND (cmd , cmd_len );
@@ -2638,8 +2639,10 @@ PHP_METHOD(Redis, multi)
26382639            }
26392640        }
26402641    } else  {
2642+         php_error_docref (NULL  TSRMLS_CC , E_WARNING , "Unknown mode sent to Redis::multi" );
26412643        RETURN_FALSE ;
26422644    }
2645+ 
26432646    RETURN_ZVAL (getThis (), 1 , 0 );
26442647}
26452648
@@ -2823,21 +2826,22 @@ PHP_METHOD(Redis, pipeline)
28232826        RETURN_FALSE ;
28242827    }
28252828
2826-     IF_PIPELINE () { 
2827-          php_error_docref ( NULL   TSRMLS_CC ,  E_WARNING , 
2828-              "Already in  pipeline mode" );
2829-     }  else  { 
2830-          IF_MULTI () { 
2831-              php_error_docref ( NULL   TSRMLS_CC ,  E_ERROR , 
2832-                 " Can 't activate pipeline  in multi mode!"); 
2833-              RETURN_FALSE ; 
2834-         } 
2829+     /* User cannot enter MULTI mode if already in a pipeline */ 
2830+     IF_MULTI () { 
2831+         php_error_docref ( NULL   TSRMLS_CC ,  E_ERROR , " Can 't activate  pipeline in multi  mode! ");
2832+          RETURN_FALSE ; 
2833+     } 
2834+ 
2835+     /* Enable pipeline mode unless we're already in that mode  in which case this 
2836+      * is just a NO OP */  
2837+     IF_ATOMIC () { 
28352838        /* NB : we keep the function fold, to detect the last function. 
28362839         * We need the response format of the n - 1 command. So, we can delete 
28372840         * when n > 2, the { 1 .. n - 2} commands */ 
28382841        free_reply_callbacks (redis_sock );
28392842        REDIS_ENABLE_MODE (redis_sock , PIPELINE );
28402843    }
2844+ 
28412845    RETURN_ZVAL (getThis (), 1 , 0 );
28422846}
28432847
0 commit comments