Author: mturk Date: Fri Sep 17 10:59:29 2010 New Revision: 998068 URL: http://svn.apache.org/viewvc?rev=998068&view=rev Log: Close sockets outside of critical section
Modified: tomcat/jk/trunk/native/common/jk_ajp_common.c Modified: tomcat/jk/trunk/native/common/jk_ajp_common.c URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_ajp_common.c?rev=998068&r1=998067&r2=998068&view=diff ============================================================================== --- tomcat/jk/trunk/native/common/jk_ajp_common.c (original) +++ tomcat/jk/trunk/native/common/jk_ajp_common.c Fri Sep 17 10:59:29 2010 @@ -3177,11 +3177,14 @@ int JK_METHOD ajp_maintain(jk_worker_t * if (rc) { unsigned int n = 0, k = 0, cnt = 0; int i; + unsigned int m, m_count = 0; + jk_sock_t *m_sock; /* Count open slots */ for (i = (int)aw->ep_cache_sz - 1; i >= 0; i--) { if (aw->ep_cache[i] && IS_VALID_SOCKET(aw->ep_cache[i]->sd)) cnt++; } + m_sock = (jk_sock_t *)malloc((cnt + 1) * sizeof(jk_sock_t)); /* Handle worker cache timeouts */ if (aw->cache_timeout > 0) { for (i = (int)aw->ep_cache_sz - 1; @@ -3195,6 +3198,8 @@ int JK_METHOD ajp_maintain(jk_worker_t * if (JK_IS_DEBUG_LEVEL(l)) rt = time(NULL); aw->ep_cache[i]->reuse = JK_FALSE; + m_sock[m_count++] = aw->ep_cache[i]->sd; + aw->ep_cache[i]->sd = JK_INVALID_SOCKET; ajp_reset_endpoint(aw->ep_cache[i], l); if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, @@ -3232,6 +3237,8 @@ int JK_METHOD ajp_maintain(jk_worker_t * aw->ep_cache[i]->sd, aw->ep_cache[i]->last_errno); aw->ep_cache[i]->reuse = JK_FALSE; + m_sock[m_count++] = aw->ep_cache[i]->sd; + aw->ep_cache[i]->sd = JK_INVALID_SOCKET; ajp_reset_endpoint(aw->ep_cache[i], l); } else { @@ -3243,6 +3250,14 @@ int JK_METHOD ajp_maintain(jk_worker_t * } } JK_LEAVE_CS(&aw->cs, rc); + /* Shutdown sockets outside of the lock. + * This has benefits only if maintain was + * called from the watchdog thread. + */ + for (m = 0; m < m_count; m++) { + jk_shutdown_socket(m_sock[m], l); + } + free(m_sock); if (n && JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, "recycled %u sockets in %d seconds from %u pool slots", --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org