@@ -429,7 +429,6 @@ static void
429429free_reply_callbacks (RedisSock * redis_sock )
430430{
431431 fold_item * fi ;
432- request_item * ri ;
433432
434433 for (fi = redis_sock -> head ; fi ; ) {
435434 fold_item * fi_next = fi -> next ;
@@ -438,15 +437,6 @@ free_reply_callbacks(RedisSock *redis_sock)
438437 }
439438 redis_sock -> head = NULL ;
440439 redis_sock -> current = NULL ;
441-
442- for (ri = redis_sock -> pipeline_head ; ri ; ) {
443- struct request_item * ri_next = ri -> next ;
444- free (ri -> request_str );
445- free (ri );
446- ri = ri_next ;
447- }
448- redis_sock -> pipeline_head = NULL ;
449- redis_sock -> pipeline_current = NULL ;
450440}
451441
452442#if (PHP_MAJOR_VERSION < 7 )
@@ -2324,6 +2314,7 @@ PHP_METHOD(Redis, discard)
23242314 }
23252315
23262316 redis_sock -> mode = ATOMIC ;
2317+ free_reply_callbacks (redis_sock );
23272318 redis_send_discard (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock );
23282319}
23292320
@@ -2394,36 +2385,24 @@ PHP_METHOD(Redis, exec)
23942385 }
23952386
23962387 IF_PIPELINE () {
2397- char * request = NULL ;
2398- int total = 0 , offset = 0 ;
2399- struct request_item * ri ;
2400-
2401- /* compute the total request size */
2402- for (ri = redis_sock -> pipeline_head ; ri ; ri = ri -> next ) {
2403- total += ri -> request_size ;
2404- }
2405- if (total ) {
2406- request = emalloc (total + 1 );
2407- /* concatenate individual elements one by one in the target buffer */
2408- for (ri = redis_sock -> pipeline_head ; ri ; ri = ri -> next ) {
2409- memcpy (request + offset , ri -> request_str , ri -> request_size );
2410- offset += ri -> request_size ;
2411- }
2412- request [total ] = '\0' ;
2413- if (redis_sock_write (redis_sock , request , total TSRMLS_CC ) < 0 ) {
2388+ if (redis_sock -> pipeline_cmd == NULL ) {
2389+ /* Empty array when no command was run. */
2390+ array_init (return_value );
2391+ } else {
2392+ if (redis_sock_write (redis_sock , redis_sock -> pipeline_cmd ,
2393+ redis_sock -> pipeline_len TSRMLS_CC ) < 0 ) {
24142394 ZVAL_FALSE (return_value );
24152395 } else {
24162396 array_init (return_value );
24172397 redis_sock_read_multibulk_multi_reply_loop (
24182398 INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock , return_value , 0 );
24192399 }
2420- efree (request );
2421- } else {
2422- /* Empty array when no command was run. */
2423- array_init (return_value );
2400+ efree (redis_sock -> pipeline_cmd );
2401+ redis_sock -> pipeline_cmd = NULL ;
2402+ redis_sock -> pipeline_len = 0 ;
24242403 }
2425- redis_sock -> mode = ATOMIC ;
24262404 free_reply_callbacks (redis_sock );
2405+ redis_sock -> mode = ATOMIC ;
24272406 }
24282407}
24292408
0 commit comments