| 97 | } |
| 98 | |
| 99 | void connect_pool::put(connect_client* conn, bool keep /* = true */) |
| 100 | { |
| 101 | time_t now = time(NULL); |
| 102 | |
| 103 | lock_->lock(); |
| 104 | |
| 105 | // ����Ƿ������������ٱ�־λ |
| 106 | if (delay_destroy_) |
| 107 | { |
| 108 | delete conn; |
| 109 | count_--; |
| 110 | assert(count_ >= 0); |
| 111 | if (count_ == 0) |
| 112 | { |
| 113 | // ������ü���Ϊ 0 �������� |
| 114 | lock_->unlock(); |
| 115 | delete this; |
| 116 | } |
| 117 | return; |
| 118 | } |
| 119 | |
| 120 | if (keep && alive_) |
| 121 | { |
| 122 | conn->set_when(now); |
| 123 | pool_.push_front(conn); |
| 124 | } |
| 125 | else |
| 126 | { |
| 127 | delete conn; |
| 128 | count_--; |
| 129 | assert(count_ >= 0); |
| 130 | } |
| 131 | |
| 132 | if (idle_ttl_ >= 0 && now - last_check_ >= check_inter_) |
| 133 | { |
| 134 | (void) check_idle(idle_ttl_, false); |
| 135 | (void) time(&last_check_); |
| 136 | } |
| 137 | lock_->unlock(); |
| 138 | } |
| 139 | |
| 140 | void connect_pool::set_delay_destroy() |
| 141 | { |
no test coverage detected