| 169 | } |
| 170 | |
| 171 | void conn_cache_push_stream(CONN_CACHE *cache, ACL_ASTREAM *stream, |
| 172 | int timeout, void (*free_fn)(ACL_ASTREAM*, void*), void *ctx) |
| 173 | { |
| 174 | const char *key = ACL_VSTREAM_PEER(acl_aio_vstream(stream)); |
| 175 | CONN_POOL *conns; |
| 176 | CONN *conn; |
| 177 | |
| 178 | #if 0 |
| 179 | acl_aio_clean_hooks(stream); |
| 180 | #endif |
| 181 | |
| 182 | /* �鿴��KEY�����ӳؾ���Ƿ���ڣ�����������ã������µ� */ |
| 183 | |
| 184 | conns = (CONN_POOL*) acl_htable_find(cache->cache, key); |
| 185 | if (conns == NULL) { |
| 186 | conns = (CONN_POOL*) acl_mymalloc(sizeof(CONN_POOL)); |
| 187 | conns->conn_cache = cache; |
| 188 | conns->aio = acl_aio_handle(stream); |
| 189 | acl_fifo_init(&conns->conns); |
| 190 | ACL_SAFE_STRNCPY(conns->key, key, sizeof(conns->key)); |
| 191 | acl_htable_enter(cache->cache, key, conns); |
| 192 | } |
| 193 | |
| 194 | #if 0 |
| 195 | /* ��������ӳ��е��������������ƣ��������ͷ���ɵ����Ӷ��� */ |
| 196 | if (acl_fifo_size(&conns->conns) >= cache->conn_limit) { |
| 197 | conn = acl_fifo_pop(&conns->conns); |
| 198 | if (conn) { |
| 199 | conn->info = NULL; |
| 200 | conn_close(conn); |
| 201 | } |
| 202 | } |
| 203 | #endif |
| 204 | |
| 205 | cache->nset++; |
| 206 | |
| 207 | /* �����µ��첽�����ӻ������ */ |
| 208 | conn = (CONN*) acl_mymalloc(sizeof(CONN)); |
| 209 | conn->stream = stream; |
| 210 | conn->ctx = ctx; |
| 211 | conn->free_fn = free_fn; |
| 212 | |
| 213 | /* ���������ӳ��� */ |
| 214 | conn->info = acl_fifo_push(&conns->conns, conn); |
| 215 | conn->conn_pool = conns; |
| 216 | |
| 217 | /* ���ø����Ļص����� */ |
| 218 | acl_aio_ctl(stream, |
| 219 | ACL_AIO_CTL_READ_HOOK_ADD, read_callback, conn, |
| 220 | ACL_AIO_CTL_CLOSE_HOOK_ADD, read_close_callback, conn, |
| 221 | ACL_AIO_CTL_TIMEO_HOOK_ADD, read_timeout_callback, conn, |
| 222 | ACL_AIO_CTL_TIMEOUT, timeout, |
| 223 | ACL_AIO_CTL_END); |
| 224 | /* ��ʼ������������ */ |
| 225 | acl_aio_read(stream); |
| 226 | } |
| 227 | |
| 228 | CONN *conn_cache_get_conn(CONN_CACHE *cache, const char *key) |
no test coverage detected
searching dependent graphs…