@@ -2356,15 +2356,13 @@ PHP_METHOD(Redis, exec)
2356
2356
char * cmd ;
2357
2357
int cmd_len ;
2358
2358
zval * object ;
2359
- struct request_item * ri ;
2360
2359
2361
- if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "O" ,
2362
- & object , redis_ce ) == FAILURE ) {
2360
+ if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (),
2361
+ "O" , & object , redis_ce ) == FAILURE ||
2362
+ redis_sock_get (object , & redis_sock TSRMLS_CC , 0 ) < 0
2363
+ ) {
2363
2364
RETURN_FALSE ;
2364
2365
}
2365
- if (redis_sock_get (object , & redis_sock TSRMLS_CC , 0 ) < 0 ) {
2366
- RETURN_FALSE ;
2367
- }
2368
2366
2369
2367
IF_MULTI () {
2370
2368
cmd_len = redis_cmd_format_static (& cmd , "EXEC" , "" );
@@ -2392,47 +2390,30 @@ PHP_METHOD(Redis, exec)
2392
2390
2393
2391
IF_PIPELINE () {
2394
2392
char * request = NULL ;
2395
- int total = 0 ;
2396
- int offset = 0 ;
2393
+ int total = 0 , offset = 0 ;
2394
+ struct request_item * ri ;
2397
2395
2398
2396
/* compute the total request size */
2399
2397
for (ri = redis_sock -> pipeline_head ; ri ; ri = ri -> next ) {
2400
2398
total += ri -> request_size ;
2401
2399
}
2402
- if (total ) {
2403
- request = malloc (total );
2404
- }
2405
-
2406
- /* concatenate individual elements one by one in the target buffer */
2407
- for (ri = redis_sock -> pipeline_head ; ri ; ri = ri -> next ) {
2408
- memcpy (request + offset , ri -> request_str , ri -> request_size );
2409
- offset += ri -> request_size ;
2410
- }
2411
-
2412
- if (request != NULL ) {
2413
- if (redis_sock_write (redis_sock , request , total TSRMLS_CC ) < 0 ) {
2414
- free (request );
2415
- free_reply_callbacks (object , redis_sock );
2416
- redis_sock -> mode = ATOMIC ;
2417
- RETURN_FALSE ;
2400
+ if (total ) {
2401
+ request = emalloc (total );
2402
+ /* concatenate individual elements one by one in the target buffer */
2403
+ for (ri = redis_sock -> pipeline_head ; ri ; ri = ri -> next ) {
2404
+ memcpy (request + offset , ri -> request_str , ri -> request_size );
2405
+ offset += ri -> request_size ;
2418
2406
}
2419
- free (request );
2407
+ if (redis_sock_write (redis_sock , request , total TSRMLS_CC ) < 0 ||
2408
+ redis_sock_read_multibulk_pipeline_reply (
2409
+ INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock ) < 0
2410
+ ) {
2411
+ ZVAL_FALSE (return_value );
2412
+ }
2413
+ efree (request );
2420
2414
} else {
2421
- redis_sock -> mode = ATOMIC ;
2422
- free_reply_callbacks (object , redis_sock );
2423
-
2424
- /* Empty array when no command was run. */
2425
- array_init (return_value );
2426
- return ;
2427
- }
2428
-
2429
- if (redis_sock_read_multibulk_pipeline_reply (
2430
- INTERNAL_FUNCTION_PARAM_PASSTHRU ,
2431
- redis_sock ) < 0 )
2432
- {
2433
- redis_sock -> mode = ATOMIC ;
2434
- free_reply_callbacks (object , redis_sock );
2435
- RETURN_FALSE ;
2415
+ /* Empty array when no command was run. */
2416
+ array_init (return_value );
2436
2417
}
2437
2418
redis_sock -> mode = ATOMIC ;
2438
2419
free_reply_callbacks (object , redis_sock );
@@ -2482,23 +2463,21 @@ PHP_METHOD(Redis, pipeline)
2482
2463
RedisSock * redis_sock ;
2483
2464
zval * object ;
2484
2465
2485
- if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "O" ,
2486
- & object , redis_ce ) == FAILURE ) {
2487
- RETURN_FALSE ;
2488
- }
2489
-
2490
- /* if the flag is activated, send the command, the reply will be "QUEUED"
2491
- * or -ERR */
2492
- if (redis_sock_get (object , & redis_sock TSRMLS_CC , 0 ) < 0 ) {
2466
+ if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (),
2467
+ "O" , &object , redis_ce ) == FAILURE ||
2468
+ redis_sock_get (object , & redis_sock TSRMLS_CC , 0 ) < 0
2469
+ ) {
2493
2470
RETURN_FALSE ;
2494
2471
}
2495
- redis_sock -> mode = PIPELINE ;
2496
2472
2497
- /* NB : we keep the function fold, to detect the last function.
2498
- * We need the response format of the n - 1 command. So, we can delete
2499
- * when n > 2, the { 1 .. n - 2} commands */
2500
- free_reply_callbacks (getThis (), redis_sock );
2473
+ IF_NOT_PIPELINE () {
2474
+ redis_sock -> mode = PIPELINE ;
2501
2475
2476
+ /* NB : we keep the function fold, to detect the last function.
2477
+ * We need the response format of the n - 1 command. So, we can delete
2478
+ * when n > 2, the { 1 .. n - 2} commands */
2479
+ free_reply_callbacks (getThis (), redis_sock );
2480
+ }
2502
2481
RETURN_ZVAL (getThis (), 1 , 0 );
2503
2482
}
2504
2483
0 commit comments