On 13/03/2009, sebb <seb...@gmail.com> wrote:
> On 13/03/2009, mt...@apache.org <mt...@apache.org> wrote:
>  > 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
>
>
> Might be good to add that assumption to the documentation in the source file?
>
>
>  >  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,
>
>
> Would it not be better to keep the const modifier here?
>  Likewise in the other changed functions.
>

Oops, crossed message, I see that has been reverted.

>  >                             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: dev-unsubscr...@tomcat.apache.org
>  >  For additional commands, e-mail: dev-h...@tomcat.apache.org
>  >
>  >
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to