Author: mturk Date: Tue Oct 7 01:01:27 2008 New Revision: 702376 URL: http://svn.apache.org/viewvc?rev=702376&view=rev Log: Move get_endpoint retries to the get_endpoint function
Modified: tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c Modified: tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c?rev=702376&r1=702375&r2=702376&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c (original) +++ tomcat/connectors/trunk/jk/native/common/jk_ajp_common.c Tue Oct 7 01:01:27 2008 @@ -2815,62 +2815,70 @@ if (pThis && pThis->worker_private && je) { ajp_worker_t *aw = pThis->worker_private; ajp_endpoint_t *ae = NULL; - time_t now = 0; int rc; - /* Obtain current time only if needed */ - if (aw->cache_timeout > 0) - now = time(NULL); + int retry = 0; + *je = NULL; + /* Obtain current time only if needed */ + while (retry < aw->retries) { - JK_ENTER_CS(&aw->cs, rc); - if (rc) { - unsigned int slot; - /* Try to find connected socket cache entry */ - for (slot = 0; slot < aw->ep_cache_sz; slot++) { - if (aw->ep_cache[slot] && - IS_VALID_SOCKET(aw->ep_cache[slot]->sd)) { - ae = aw->ep_cache[slot]; - aw->ep_cache[slot] = NULL; - break; - } - } - if (!ae) { - /* No connected cache entry found. - * Use the first free one. - */ + JK_ENTER_CS(&aw->cs, rc); + if (rc) { + unsigned int slot; + /* Try to find connected socket cache entry */ for (slot = 0; slot < aw->ep_cache_sz; slot++) { - if (aw->ep_cache[slot]) { + if (aw->ep_cache[slot] && + IS_VALID_SOCKET(aw->ep_cache[slot]->sd)) { ae = aw->ep_cache[slot]; aw->ep_cache[slot] = NULL; break; } } - } - JK_LEAVE_CS(&aw->cs, rc); - if (ae) { - ae->last_access = now; - *je = &ae->endpoint; - if (JK_IS_DEBUG_LEVEL(l)) - jk_log(l, JK_LOG_DEBUG, - "acquired connection pool slot=%u", - slot); - JK_TRACE_EXIT(l); - return JK_TRUE; + if (!ae) { + /* No connected cache entry found. + * Use the first free one. + */ + for (slot = 0; slot < aw->ep_cache_sz; slot++) { + if (aw->ep_cache[slot]) { + ae = aw->ep_cache[slot]; + aw->ep_cache[slot] = NULL; + break; + } + } + } + JK_LEAVE_CS(&aw->cs, rc); + if (ae) { + if (aw->cache_timeout > 0) + ae->last_access = time(NULL); + *je = &ae->endpoint; + if (JK_IS_DEBUG_LEVEL(l)) + jk_log(l, JK_LOG_DEBUG, + "acquired connection pool slot=%u", + slot); + JK_TRACE_EXIT(l); + return JK_TRUE; + } + else { + retry++; + if (JK_IS_DEBUG_LEVEL(l)) + jk_log(l, JK_LOG_DEBUG, + "could not get free endpoint for worker %s" + " (retry %d, sleeping for %d ms)", + aw->name, retry, aw->retry_interval); + jk_sleep(aw->retry_interval); + } } else { - jk_log(l, JK_LOG_WARNING, - "Unable to get the free endpoint for worker %s from %u slots", - aw->name, aw->ep_cache_sz); - } - } - else { - jk_log(l, JK_LOG_ERROR, - "locking thread (errno=%d)", - errno); - JK_TRACE_EXIT(l); - return JK_FALSE; + jk_log(l, JK_LOG_ERROR, + "locking thread (errno=%d)", errno); + JK_TRACE_EXIT(l); + return JK_FALSE; + } } + jk_log(l, JK_LOG_WARNING, + "Unable to get the free endpoint for worker %s from %u slots", + aw->name, aw->ep_cache_sz); } else { JK_LOG_NULL_PARAMS(l); Modified: tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c?rev=702376&r1=702375&r2=702376&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c (original) +++ tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c Tue Oct 7 01:01:27 2008 @@ -1119,8 +1119,6 @@ int is_service_error = JK_HTTP_OK; ajp_worker_t *aw = (ajp_worker_t *)rec->worker->worker_private; jk_endpoint_t *end = NULL; - int ge_retry = 0; - int ge_retry_interval = aw->retry_interval; if (!s->route) s->route = rec->route; @@ -1140,21 +1138,7 @@ if (p->worker->lblock == JK_LB_LOCK_PESSIMISTIC) jk_shm_unlock(); - while ((!(r=rec->worker->get_endpoint(rec->worker, &end, l)) || !end) && - (ge_retry < aw->retries)) { - ge_retry++; - if (JK_IS_DEBUG_LEVEL(l)) - jk_log(l, JK_LOG_DEBUG, - "could not get free endpoint for worker" - " (retry %d, sleeping for %d ms)", - ge_retry, ge_retry_interval); - jk_sleep(ge_retry_interval); - /* Pull shared memory if something changed during sleep */ - jk_shm_lock(); - if (p->worker->sequence != p->worker->s->h.sequence) - jk_lb_pull(p->worker, l); - jk_shm_unlock(); - } + r = rec->worker->get_endpoint(rec->worker, &end, l); if (!r || !end) { /* If we can not get the endpoint * mark the worker as busy rather then @@ -1171,7 +1155,7 @@ jk_shm_unlock(); jk_log(l, JK_LOG_INFO, "could not get free endpoint for worker %s (%d retries)", - rec->name, ge_retry); + rec->name, retry); } else { int service_stat = JK_UNSET; --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]