dgaudet     98/01/02 15:46:10

  Modified:    .        STATUS
               src      CHANGES
               src/modules/standard mod_status.c
  Log:
  - remove an unused buffer
  
  - mark a constant structure as const, and make it static, it's a waste to
  initialize it on every call
  
  - initialize the status flags once rather than on every call
  
  Reviewed by:  Jim Jagielski
  
  Revision  Changes    Path
  1.46      +1 -4      apachen/STATUS
  
  Index: STATUS
  ===================================================================
  RCS file: /export/home/cvs/apachen/STATUS,v
  retrieving revision 1.45
  retrieving revision 1.46
  diff -u -r1.45 -r1.46
  --- STATUS    1998/01/02 23:44:42     1.45
  +++ STATUS    1998/01/02 23:46:06     1.46
  @@ -64,6 +64,7 @@
       * Dean's [PATCH] 1.3: "DoS" attack
       * Paul/Ben's [PATCH] 1.3: spaces in NT spawn* arguments
       * Dean's [PATCH] mod_info minor cleanups (take 2)
  +    * Dean's [PATCH] mod_status cleanups
   
   Available Patches:
   
  @@ -75,10 +76,6 @@
       * [PATCH] mod_digest/1599: proxy authentication using the digest auth
         scheme never succeeds (fwd)
        <[EMAIL PROTECTED]>
  -     Status: Dean +1, Jim +1
  -
  -    * Dean's [PATCH] mod_status cleanups
  -     <[EMAIL PROTECTED]>
        Status: Dean +1, Jim +1
   
       * Martin's [PATCH] 36kB: Make apache compile & run on an EBCDIC mainframe
  
  
  
  1.555     +2 -0      apachen/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /export/home/cvs/apachen/src/CHANGES,v
  retrieving revision 1.554
  retrieving revision 1.555
  diff -u -r1.554 -r1.555
  --- CHANGES   1998/01/02 23:44:43     1.554
  +++ CHANGES   1998/01/02 23:46:07     1.555
  @@ -1,5 +1,7 @@
   Changes with Apache 1.3b4
   
  +  *) A few cleanups in mod_status for efficiency.  [Dean Gaudet]
  +
     *) A few cleanups in mod_info to make it thread-safe, and remove an
        off-by-5 bug that could hammer \0 on the stack. [Dean Gaudet]
   
  
  
  
  1.69      +35 -33    apachen/src/modules/standard/mod_status.c
  
  Index: mod_status.c
  ===================================================================
  RCS file: /export/home/cvs/apachen/src/modules/standard/mod_status.c,v
  retrieving revision 1.68
  retrieving revision 1.69
  diff -u -r1.68 -r1.69
  --- mod_status.c      1997/12/20 10:21:59     1.68
  +++ mod_status.c      1998/01/02 23:46:10     1.69
  @@ -158,8 +158,6 @@
   static void show_time(request_rec *r, time_t tsecs)
   {
       long days, hrs, mins, secs;
  -    char buf[100];
  -    char *s;
   
       secs = tsecs % 60;
       tsecs /= 60;
  @@ -167,8 +165,6 @@
       tsecs /= 60;
       hrs = tsecs % 24;
       days = tsecs / 24;
  -    s = buf;
  -    *s = '\0';
       if (days)
        rprintf(r, " %ld day%s", days, days == 1 ? "" : "s");
       if (hrs)
  @@ -190,19 +186,22 @@
   
   struct stat_opt {
       int id;
  -    char *form_data_str;
  -    char *hdr_out_str;
  +    const char *form_data_str;
  +    const char *hdr_out_str;
   };
   
  +static const struct stat_opt status_options[] =      /* see #defines above */
  +{
  +    {STAT_OPT_REFRESH, "refresh", "Refresh"},
  +    {STAT_OPT_NOTABLE, "notable", NULL},
  +    {STAT_OPT_AUTO, "auto", NULL},
  +    {STAT_OPT_END, NULL, NULL}
  +};
  +
  +static char status_flags[SERVER_NUM_STATUS];
  +
   static int status_handler(request_rec *r)
   {
  -    struct stat_opt options[] =      /* see #defines above */
  -    {
  -     {STAT_OPT_REFRESH, "refresh", "Refresh"},
  -     {STAT_OPT_NOTABLE, "notable", NULL},
  -     {STAT_OPT_AUTO, "auto", NULL},
  -     {STAT_OPT_END, NULL, NULL}
  -    };
       char *loc;
       time_t nowtime = time(NULL);
       time_t up_time;
  @@ -228,22 +227,11 @@
       server_rec *server = r->server;
       short_score score_record;
       parent_score ps_record;
  -    char status[SERVER_NUM_STATUS];
       char stat_buffer[HARD_SERVER_LIMIT];
       clock_t tu, ts, tcu, tcs;
   
       tu = ts = tcu = tcs = 0;
   
  -    status[SERVER_DEAD] = '.';       /* We don't want to assume these are in 
*/
  -    status[SERVER_READY] = '_';      /* any particular order in scoreboard.h 
*/
  -    status[SERVER_STARTING] = 'S';
  -    status[SERVER_BUSY_READ] = 'R';
  -    status[SERVER_BUSY_WRITE] = 'W';
  -    status[SERVER_BUSY_KEEPALIVE] = 'K';
  -    status[SERVER_BUSY_LOG] = 'L';
  -    status[SERVER_BUSY_DNS] = 'D';
  -    status[SERVER_GRACEFUL] = 'G';
  -
       if (!exists_scoreboard_image()) {
        aplog_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, r->server,
                    "Server status unavailable in inetd mode");
  @@ -261,15 +249,15 @@
   
       if (r->args) {
        i = 0;
  -     while (options[i].id != STAT_OPT_END) {
  -         if ((loc = strstr(r->args, options[i].form_data_str)) != NULL) {
  -             switch (options[i].id) {
  +     while (status_options[i].id != STAT_OPT_END) {
  +         if ((loc = strstr(r->args, status_options[i].form_data_str)) != 
NULL) {
  +             switch (status_options[i].id) {
                case STAT_OPT_REFRESH:
  -                 if (*(loc + strlen(options[i].form_data_str)) == '=')
  -                     table_set(r->headers_out, options[i].hdr_out_str,
  -                               loc + strlen(options[i].hdr_out_str) + 1);
  +                 if (*(loc + strlen(status_options[i].form_data_str)) == '=')
  +                     table_set(r->headers_out, status_options[i].hdr_out_str,
  +                               loc + strlen(status_options[i].hdr_out_str) + 
1);
                    else
  -                     table_set(r->headers_out, options[i].hdr_out_str, "1");
  +                     table_set(r->headers_out, 
status_options[i].hdr_out_str, "1");
                    break;
                case STAT_OPT_NOTABLE:
                    no_table_report = 1;
  @@ -294,7 +282,7 @@
        score_record = scoreboard_image->servers[i];
        ps_record = scoreboard_image->parent[i];
        res = score_record.status;
  -     stat_buffer[i] = (res == SERVER_UNKNOWN) ? '?' : status[res];
  +     stat_buffer[i] = (res == SERVER_UNKNOWN) ? '?' : status_flags[res];
        if (res == SERVER_READY)
            ready++;
        else if (res != SERVER_DEAD && res != SERVER_UNKNOWN)
  @@ -656,6 +644,20 @@
       return 0;
   }
   
  +
  +static void status_init(server_rec *s, pool *p)
  +{
  +    status_flags[SERVER_DEAD] = '.'; /* We don't want to assume these are in 
*/
  +    status_flags[SERVER_READY] = '_';        /* any particular order in 
scoreboard.h */
  +    status_flags[SERVER_STARTING] = 'S';
  +    status_flags[SERVER_BUSY_READ] = 'R';
  +    status_flags[SERVER_BUSY_WRITE] = 'W';
  +    status_flags[SERVER_BUSY_KEEPALIVE] = 'K';
  +    status_flags[SERVER_BUSY_LOG] = 'L';
  +    status_flags[SERVER_BUSY_DNS] = 'D';
  +    status_flags[SERVER_GRACEFUL] = 'G';
  +}
  +
   static handler_rec status_handlers[] =
   {
       {STATUS_MAGIC_TYPE, status_handler},
  @@ -666,7 +668,7 @@
   module MODULE_VAR_EXPORT status_module =
   {
       STANDARD_MODULE_STUFF,
  -    NULL,                    /* initializer */
  +    status_init,             /* initializer */
       NULL,                    /* dir config creater */
       NULL,                    /* dir merger --- default is to override */
       NULL,                    /* server config */
  
  
  

Reply via email to