@@ -425,7 +425,7 @@ const redis_result* redis_command::run(redis_client_cluster* cluster,
425
425
426
426
if (result_ == NULL )
427
427
{
428
- // 将连接对象归还给连接池对象
428
+ // 将旧连接对象归还给连接池对象
429
429
conn->get_pool ()->put (conn, true );
430
430
logger_error (" result NULL" );
431
431
@@ -437,7 +437,7 @@ const redis_result* redis_command::run(redis_client_cluster* cluster,
437
437
438
438
if (type == REDIS_RESULT_UNKOWN)
439
439
{
440
- // 将连接对象归还给连接池对象
440
+ // 将旧连接对象归还给连接池对象
441
441
conn->get_pool ()->put (conn, true );
442
442
logger_error (" unknown result type: %d" , type);
443
443
@@ -465,22 +465,25 @@ const redis_result* redis_command::run(redis_client_cluster* cluster,
465
465
return result_;
466
466
}
467
467
468
- // 以下过程不再引用该次的 conn 对象,此处将连接对象归还给连接池对象
469
- conn->get_pool ()->put (conn, true );
470
-
471
468
#define EQ (x, y ) !strncasecmp((x), (y), sizeof (y) -1 )
472
469
473
470
// 对于结果类型为错误类型,则需要进一步判断是否是重定向指令
474
471
const char * ptr = result_->get_error ();
475
472
if (ptr == NULL || *ptr == 0 )
476
473
{
474
+ // 将旧连接对象归还给连接池对象
475
+ conn->get_pool ()->put (conn, true );
477
476
logger_error (" result error: null" );
477
+
478
478
return result_;
479
479
}
480
480
481
481
// 如果出错信息为重定向指令,则执行重定向过程
482
482
if (EQ (ptr, " MOVED" ))
483
483
{
484
+ // 将旧连接对象归还给连接池对象
485
+ conn->get_pool ()->put (conn, true );
486
+
484
487
const char * addr = get_addr (ptr);
485
488
if (addr == NULL )
486
489
{
@@ -515,6 +518,9 @@ const redis_result* redis_command::run(redis_client_cluster* cluster,
515
518
}
516
519
else if (EQ (ptr, " ASK" ))
517
520
{
521
+ // 将旧连接对象归还给连接池对象
522
+ conn->get_pool ()->put (conn, true );
523
+
518
524
const char * addr = get_addr (ptr);
519
525
if (addr == NULL )
520
526
{
@@ -573,20 +579,26 @@ const redis_result* redis_command::run(redis_client_cluster* cluster,
573
579
acl_doze (redirect_sleep_);
574
580
}
575
581
582
+ // 将旧连接对象归还给连接池对象
583
+ conn->get_pool ()->put (conn, true );
584
+
576
585
conn = peek_conn (cluster, -1 );
577
586
if (conn == NULL )
578
587
{
579
588
logger_error (" peek_conn NULL" );
580
589
return result_;
581
590
}
582
- clear (true );
583
591
592
+ clear (true );
584
593
set_client_addr (*conn);
585
594
}
586
595
587
596
// 对于其它错误类型,则直接返回本次得到的响应结果对象
588
597
else
589
598
{
599
+ // 将旧连接对象归还给连接池对象
600
+ conn->get_pool ()->put (conn, true );
601
+
590
602
logger_error (" server error: %s" , ptr);
591
603
return result_;
592
604
}
0 commit comments