@@ -448,32 +448,22 @@ PS_WRITE_FUNC(redis)
448
448
}
449
449
/* }}} */
450
450
451
- /* {{{ PS_DESTROY_FUNC
452
- */
453
- PS_DESTROY_FUNC (redis )
451
+ static int
452
+ destroy_session (redis_pool_member * rpm , RedisSock * sock , const char * session , int session_len TSRMLS_DC )
454
453
{
455
- char * cmd , * response , * session ;
456
- int cmd_len , response_len , session_len ;
457
-
458
- redis_pool * pool = PS_GET_MOD_DATA ();
459
- redis_pool_member * rpm = redis_pool_get_sock (pool , key TSRMLS_CC );
460
- RedisSock * redis_sock = rpm ?rpm -> redis_sock :NULL ;
461
- if (!rpm || !redis_sock ){
462
- return FAILURE ;
463
- }
454
+ char * cmd , * response ;
455
+ int cmd_len , response_len ;
464
456
465
457
/* send DEL command */
466
- session = redis_session_key (rpm , key , strlen (key ), & session_len );
467
458
cmd_len = redis_cmd_format_static (& cmd , "DEL" , "s" , session , session_len );
468
- efree (session );
469
- if (redis_sock_write (redis_sock , cmd , cmd_len TSRMLS_CC ) < 0 ) {
459
+ if (redis_sock_write (sock , cmd , cmd_len TSRMLS_CC ) < 0 ) {
470
460
efree (cmd );
471
461
return FAILURE ;
472
462
}
473
463
efree (cmd );
474
464
475
465
/* read response */
476
- if ((response = redis_sock_read (redis_sock , & response_len TSRMLS_CC )) == NULL ) {
466
+ if ((response = redis_sock_read (sock , & response_len TSRMLS_CC )) == NULL ) {
477
467
return FAILURE ;
478
468
}
479
469
@@ -485,6 +475,39 @@ PS_DESTROY_FUNC(redis)
485
475
return FAILURE ;
486
476
}
487
477
}
478
+
479
+ /* {{{ PS_DESTROY_FUNC
480
+ */
481
+ PS_DESTROY_FUNC (redis )
482
+ {
483
+ char * session ;
484
+ int session_len ;
485
+ int ret ;
486
+
487
+ redis_pool * pool = PS_GET_MOD_DATA ();
488
+ redis_pool_member * rpm = redis_pool_get_sock (pool , key TSRMLS_CC );
489
+ RedisSock * redis_sock = rpm ?rpm -> redis_sock :NULL ;
490
+ if (!rpm || !redis_sock ){
491
+ return FAILURE ;
492
+ }
493
+
494
+ /* disable exceptions */
495
+ redis_sock -> nothrow = 1 ;
496
+
497
+ /* delete session from main server or failover. */
498
+ session = redis_session_key (rpm , key , strlen (key ), & session_len );
499
+ ret = destroy_session (rpm , redis_sock , session , session_len TSRMLS_CC );
500
+ if (ret == FAILURE && rpm -> failover_sock ) {
501
+ ret = destroy_session (rpm , rpm -> failover_sock , session , session_len TSRMLS_CC );
502
+ }
503
+ efree (session );
504
+
505
+ /* re-enable exceptions */
506
+ redis_sock -> nothrow = 0 ;
507
+
508
+ return ret ;
509
+
510
+ }
488
511
/* }}} */
489
512
490
513
/* {{{ PS_GC_FUNC
0 commit comments