mturk 2005/02/17 04:32:16 Modified: jk/native/common jk_ajp_common.c Log: Create separate function for creating the entire endpoint cache. It is just a way to make the code more readable. Revision Changes Path 1.86 +62 -49 jakarta-tomcat-connectors/jk/native/common/jk_ajp_common.c Index: jk_ajp_common.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_ajp_common.c,v retrieving revision 1.85 retrieving revision 1.86 diff -u -r1.85 -r1.86 --- jk_ajp_common.c 17 Feb 2005 07:14:19 -0000 1.85 +++ jk_ajp_common.c 17 Feb 2005 12:32:16 -0000 1.86 @@ -1780,21 +1780,45 @@ return JK_FALSE; } -static ajp_endpoint_t *ajp_create_endpoint(jk_worker_t *w, int proto, time_t now) +static int ajp_create_endpoint_cache(ajp_worker_t *p, int proto, jk_logger_t *l) { - ajp_endpoint_t *ae = (ajp_endpoint_t *)calloc(1, sizeof(ajp_endpoint_t)); - if (ae) { - ae->sd = -1; - ae->reuse = JK_FALSE; - ae->last_access = now; - jk_open_pool(&ae->pool, ae->buf, sizeof(ae->buf)); - ae->worker = w->worker_private; - ae->endpoint.endpoint_private = ae; - ae->proto = proto; - ae->endpoint.service = ajp_service; - ae->endpoint.done = ajp_done; + unsigned int i; + time_t now = time(NULL); + + JK_TRACE_ENTER(l); + p->ep_cache = (ajp_endpoint_t **)calloc(1, sizeof(ajp_endpoint_t *) * + p->ep_cache_sz); + if (!p->ep_cache) { + JK_TRACE_EXIT(l); + return JK_FALSE; } - return ae; + if (JK_IS_DEBUG_LEVEL(l)) + jk_log(l, JK_LOG_DEBUG, + "setting connection cache size to %d", + p->ep_cache_sz); + for (i = 0; i < p->ep_cache_sz; i++) { + p->ep_cache[i] = (ajp_endpoint_t *)calloc(1, sizeof(ajp_endpoint_t)); + if (!p->ep_cache[i]) { + jk_log(l, JK_LOG_ERROR, + "creating endpont cache slot %d errno=%d", + i, errno); + JK_TRACE_EXIT(l); + return JK_FALSE; + } + p->ep_cache[i]->sd = -1; + p->ep_cache[i]->reuse = JK_FALSE; + p->ep_cache[i]->last_access = now; + jk_open_pool(&(p->ep_cache[i]->pool), p->ep_cache[i]->buf, + sizeof(p->ep_cache[i]->buf)); + p->ep_cache[i]->worker = p; + p->ep_cache[i]->endpoint.endpoint_private = p->ep_cache[i]; + p->ep_cache[i]->proto = proto; + p->ep_cache[i]->endpoint.service = ajp_service; + p->ep_cache[i]->endpoint.done = ajp_done; + } + + JK_TRACE_EXIT(l); + return JK_TRUE; } int ajp_init(jk_worker_t *pThis, @@ -1903,40 +1927,16 @@ p->secret = jk_get_worker_secret(props, p->name); p->ep_mincache_sz = 1; - p->ep_cache = (ajp_endpoint_t **)calloc(1, sizeof(ajp_endpoint_t *) * - p->ep_cache_sz); - if (p->ep_cache) { - unsigned int i; - time_t now = time(NULL); - - if (JK_IS_DEBUG_LEVEL(l)) - jk_log(l, JK_LOG_DEBUG, - "setting connection cache size to %d", - p->ep_cache_sz); - /* Initialize cache slots */ - for (i = 0; i < p->ep_cache_sz; i++) { - p->ep_cache[i] = ajp_create_endpoint(pThis, proto, now); - if (!p->ep_cache[i]) { - jk_log(l, JK_LOG_ERROR, - "creating endpont cache slot %d errno=%d", - i, errno); - JK_TRACE_EXIT(l); - return JK_FALSE; - } - jk_log(l, JK_LOG_DEBUG, - "Initialized endpont cache slot %d %#lx:%#lx", - i, p->ep_cache[i], &(p->ep_cache[i]->pool)); - } - JK_INIT_CS(&(p->cs), i); - if (i == JK_FALSE) { - jk_log(l, JK_LOG_ERROR, - "creating thread lock errno=%d", - errno); - JK_TRACE_EXIT(l); - return JK_FALSE; - } + /* Initialize cache slots */ + JK_INIT_CS(&(p->cs), rc); + if (!rc) { + jk_log(l, JK_LOG_ERROR, + "creating thread lock errno=%d", + errno); + JK_TRACE_EXIT(l); + return JK_FALSE; } - else { + if (!ajp_create_endpoint_cache(p, proto, l)) { jk_log(l, JK_LOG_ERROR, "allocating ep_cache of size %d", p->ep_cache_sz); @@ -2046,8 +2046,12 @@ if (pThis && pThis->worker_private && je) { ajp_worker_t *aw = pThis->worker_private; ajp_endpoint_t *ae = NULL; - time_t now = time(NULL); + time_t now = 0; int rc; + /* Obtain current time only if needed */ + if (aw->cache_timeout > 0 || aw->recycle_timeout > 0) + now = time(NULL); + *je = NULL; JK_ENTER_CS(&aw->cs, rc); if (rc) { @@ -2076,7 +2080,6 @@ } } } - JK_LEAVE_CS(&aw->cs, rc); if (ae) { if (ae->sd > 0 && aw->recycle_timeout > 0) { /* Handle timeouts for open sockets */ @@ -2096,6 +2099,7 @@ } ae->last_access = now; *je = &ae->endpoint; + JK_LEAVE_CS(&aw->cs, rc); if (JK_IS_DEBUG_LEVEL(l)) jk_log(l, JK_LOG_DEBUG, "acquired connection cache slot=%d", @@ -2103,6 +2107,15 @@ JK_TRACE_EXIT(l); return JK_TRUE; } + JK_LEAVE_CS(&aw->cs, rc); + } + else { + jk_log(l, JK_LOG_ERROR, + "locking thread with errno=%d", + errno); + JK_TRACE_EXIT(l); + return JK_FALSE; + } jk_log(l, JK_LOG_INFO, "can't find free endpoint");
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]