Author: mturk
Date: Fri Mar 13 07:25:50 2009
New Revision: 753147
URL: http://svn.apache.org/viewvc?rev=753147&view=rev
Log:
Use inplace rewrite of dot part. We are safe to do that cause sessionid is
allocated for every request
Modified:
tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c
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=753147&r1=753146&r2=753147&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_lb_worker.c Fri Mar 13 07:25:50
2009
@@ -689,7 +689,7 @@
static int find_by_session(jk_ws_service_t *s,
lb_worker_t *p,
- const char *name,
+ char *sessionid,
jk_logger_t *l)
{
@@ -697,7 +697,7 @@
unsigned int i;
for (i = 0; i < p->num_of_workers; i++) {
- if (strcmp(p->lb_workers[i].route, name) == 0) {
+ if (strcmp(p->lb_workers[i].route, sessionid) == 0) {
rc = i;
break;
}
@@ -707,33 +707,22 @@
static int find_best_bydomain(jk_ws_service_t *s,
lb_worker_t *p,
- const char *name,
+ char *sessionid,
int *states,
jk_logger_t *l)
{
unsigned int i;
int d = 0;
jk_uint64_t curmin = 0;
- char rdomain[JK_SHM_STR_SIZ+1];
int candidate = -1;
int activation;
lb_sub_worker_t wr;
- const char *domain = strchr(name, '.');
+ char *idpart = strchr(sessionid, '.');
+ char *domain = sessionid;
- if (domain) {
- size_t dl = (size_t)(domain - name);
- if (dl >= JK_SHM_STR_SIZ) {
- /* Overflow */
- return -1;
- }
- else {
- strncpy(rdomain, name, dl);
- rdomain[dl] = '\0';
- domain = rdomain;
- }
+ if (idpart) {
+ *idpart = '\0';
}
- else
- domain = name;
/* First try to see if we have available candidate */
for (i = 0; i < p->num_of_workers; i++) {
/* Skip all workers that are not member of domain */
@@ -759,6 +748,10 @@
}
}
}
+ if (idpart) {
+ /* Restore original char */
+ *idpart = '.';
+ }
return candidate;
}
@@ -810,17 +803,17 @@
static int find_bysession_route(jk_ws_service_t *s,
lb_worker_t *p,
- const char *name,
+ char *sessionid,
int *states,
jk_logger_t *l)
{
int uses_domain = 0;
int candidate = -1;
- candidate = find_by_session(s, p, name, l);
+ candidate = find_by_session(s, p, sessionid, l);
if (candidate < 0) {
uses_domain = 1;
- candidate = find_best_bydomain(s, p, name, states, l);
+ candidate = find_best_bydomain(s, p, sessionid, states, l);
}
if (candidate >= 0) {
lb_sub_worker_t wr = p->lb_workers[candidate];
@@ -871,7 +864,7 @@
{
int rc = -1;
unsigned int i;
- const char *redirect = NULL;
+ char *redirect = NULL;
for (i = 0; i < p->num_of_workers; i++) {
if (strlen(p->lb_workers[i].redirect)) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]