We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ConnectionInfo *conn_pool_get_connection(ConnectionPool *cp, const ConnectionInfo *conn, int *err_no) { ............ if (cm->head == NULL) { if ((cp->max_count_per_entry > 0) && (cm->total_count >= cp->max_count_per_entry)) { *err_no = ENOSPC; logError("file: "__FILE__", line: %d, " \ "connections: %d of server %s:%d " \ "exceed limit: %d", __LINE__, \ cm->total_count, conn->ip_addr, \ conn->port, cp->max_count_per_entry); pthread_mutex_unlock(&cm->lock); return NULL; } bytes = sizeof(ConnectionInfo) + sizeof(ConnectionNode); p = (char *)malloc(bytes); if (p == NULL) { *err_no = errno != 0 ? errno : ENOMEM; logError("file: "__FILE__", line: %d, " \ "malloc %d bytes fail, errno: %d, " \ "error info: %s", __LINE__, \ bytes, *err_no, STRERROR(*err_no)); pthread_mutex_unlock(&cm->lock); return NULL; } node = (ConnectionNode *)(p + sizeof(ConnectionInfo)); node->conn = (ConnectionInfo *)p; node->manager = cm; node->next = NULL; node->atime = 0; 38 cm->head = node //是不是应加上这行代码呢? cm->total_count++; pthread_mutex_unlock(&cm->lock); memcpy(node->conn, conn, sizeof(ConnectionInfo)); node->conn->sock = -1; *err_no = conn_pool_connect_server(node->conn, \ cp->connect_timeout); if (*err_no != 0) { free(p); return NULL; } logDebug("file: "__FILE__", line: %d, " \ "server %s:%d, new connection: %d, " \ "total_count: %d, free_count: %d", \ __LINE__, conn->ip_addr, conn->port, \ node->conn->sock, cm->total_count, \ cm->free_count); return node->conn; } else { node = cm->head; ci = node->conn; cm->head = node->next; cm->free_count--; if (current_time - node->atime > cp->max_idle_time) { cm->total_count--; logDebug("file: "__FILE__", line: %d, " \ "server %s:%d, connection: %d idle " \ "time: %d exceeds max idle time: %d, "\ "total_count: %d, free_count: %d", \ __LINE__, conn->ip_addr, conn->port, \ ci->sock, \ (int)(current_time - node->atime), \ cp->max_idle_time, cm->total_count, \ cm->free_count); conn_pool_disconnect_server(ci); free(ci); continue; } .............. }
Original issue reported on code.google.com by lichunfe...@gmail.com on 10 Apr 2013 at 2:34
lichunfe...@gmail.com
The text was updated successfully, but these errors were encountered:
这个不是问题啊! 分配出去的连接,用完后才会加入到链表中。
Original comment by happyfis...@gmail.com on 19 Apr 2013 at 9:54
happyfis...@gmail.com
Sorry, something went wrong.
我也认为这里有问题,,这里应该加上cm->head=node,要不然cm->he ad永远都是空的。。不停的在分配node,并且 cm->head = node->next; cm->free_count--; 这里也应该去掉,在else分支。
Original comment by guowl0...@gmail.com on 16 Aug 2013 at 5:43
guowl0...@gmail.com
No branches or pull requests
Original issue reported on code.google.com by
lichunfe...@gmail.com
on 10 Apr 2013 at 2:34The text was updated successfully, but these errors were encountered: