You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by Dean Gaudet <dg...@hyperreal.com> on 1997/06/29 01:05:18 UTC

cvs commit: apache/src http_conf_globals.h http_config.c http_core.c http_main.c httpd.h

dgaudet     97/06/28 16:05:17

  Modified:    src       http_conf_globals.h http_config.c http_core.c
                        http_main.c  httpd.h
  Log:
  Implement a LockFile directive to move the lockfile to a different location.
  
  Submitted by:	Jim and Dean
  
  Revision  Changes    Path
  1.11      +1 -0      apache/src/http_conf_globals.h
  
  Index: http_conf_globals.h
  ===================================================================
  RCS file: /export/home/cvs/apache/src/http_conf_globals.h,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -C3 -r1.10 -r1.11
  *** http_conf_globals.h	1997/06/15 19:22:25	1.10
  --- http_conf_globals.h	1997/06/28 23:05:13	1.11
  ***************
  *** 74,79 ****
  --- 74,80 ----
    
    extern char *pid_fname;
    extern char *scoreboard_fname;
  + extern char *lock_fname;
    extern char *server_argv0;
    
    /* Trying to allocate these in the config pool gets us into some *nasty*
  
  
  
  1.52      +1 -0      apache/src/http_config.c
  
  Index: http_config.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/http_config.c,v
  retrieving revision 1.51
  retrieving revision 1.52
  diff -C3 -r1.51 -r1.52
  *** http_config.c	1997/06/28 22:12:53	1.51
  --- http_config.c	1997/06/28 23:05:13	1.52
  ***************
  *** 1040,1045 ****
  --- 1040,1046 ----
        daemons_limit = HARD_SERVER_LIMIT;
        pid_fname = DEFAULT_PIDLOG;
        scoreboard_fname = DEFAULT_SCOREBOARD;
  +     lock_fname = DEFAULT_LOCKFILE;
        max_requests_per_child = DEFAULT_MAX_REQUESTS_PER_CHILD;
        bind_address.s_addr = htonl(INADDR_ANY);
        listeners = NULL;
  
  
  
  1.86      +7 -0      apache/src/http_core.c
  
  Index: http_core.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/http_core.c,v
  retrieving revision 1.85
  retrieving revision 1.86
  diff -C3 -r1.85 -r1.86
  *** http_core.c	1997/06/28 20:10:12	1.85
  --- http_core.c	1997/06/28 23:05:13	1.86
  ***************
  *** 970,975 ****
  --- 970,980 ----
        return NULL;
    }
    
  + const char *set_lockfile (cmd_parms *cmd, void *dummy, char *arg) {
  +     lock_fname = pstrdup (cmd->pool, arg);
  +     return NULL;
  + }
  + 
    const char *set_idcheck (cmd_parms *cmd, core_dir_config *d, int arg) {
        d->do_rfc1413 = arg;
        return NULL;
  ***************
  *** 1230,1235 ****
  --- 1235,1242 ----
        "A file for logging the server process ID"},
    { "ScoreBoardFile", set_scoreboard, NULL, RSRC_CONF, TAKE1,
        "A file for Apache to maintain runtime process management information"},
  + { "LockFile", set_lockfile, NULL, RSRC_CONF, TAKE1,
  +     "The lockfile used when Apache needs to lock the accept() call"},
    { "AccessConfig", set_server_string_slot,
      (void *)XtOffsetOf (server_rec, access_confname), RSRC_CONF, TAKE1,
      "The filename of the access config file" },
  
  
  
  1.164     +15 -25    apache/src/http_main.c
  
  Index: http_main.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/http_main.c,v
  retrieving revision 1.163
  retrieving revision 1.164
  diff -C3 -r1.163 -r1.164
  *** http_main.c	1997/06/28 22:39:21	1.163
  --- http_main.c	1997/06/28 23:05:14	1.164
  ***************
  *** 154,159 ****
  --- 154,160 ----
    int excess_requests_per_child;
    char *pid_fname;
    char *scoreboard_fname;
  + char *lock_fname;
    char *server_argv0;
    struct in_addr bind_address;
    listen_rec *listeners;
  ***************
  *** 201,206 ****
  --- 202,218 ----
    #endif
    #endif /* WIN32 */
    
  + #if defined(USE_FCNTL_SERIALIZED_ACCEPT) || defined(USE_FLOCK_SERIALIZED_ACCEPT)
  + static void expand_lock_fname(pool *p)
  + {
  +     char buf[20];
  + 
  +     ap_snprintf( buf, sizeof(buf)-1, ".%u", getpid() );
  +     buf[sizeof(buf)-1] = 0;
  +     lock_fname = pstrcat (p, server_root_relative (p, lock_fname), buf, NULL);
  + }
  + #endif
  + 
    #if defined(USE_FCNTL_SERIALIZED_ACCEPT)
    static struct flock lock_it;
    static struct flock unlock_it;
  ***************
  *** 213,220 ****
     */
    void
    accept_mutex_init(pool *p)
  !     {
  !     char lock_fname[256];
    
        lock_it.l_whence = SEEK_SET;   /* from current point */
        lock_it.l_start  = 0;          /* -"- */
  --- 225,231 ----
     */
    void
    accept_mutex_init(pool *p)
  ! {
    
        lock_it.l_whence = SEEK_SET;   /* from current point */
        lock_it.l_start  = 0;          /* -"- */
  ***************
  *** 227,245 ****
        unlock_it.l_type   = F_UNLCK;  /* set exclusive/write lock */
        unlock_it.l_pid    = 0;        /* pid not actually interesting */
    
  ! #ifdef __MACHTEN__
  !     strncpy(lock_fname, "/var/tmp/htlock.XXXXXX", sizeof(lock_fname)-1);
  ! #else
  !     strncpy(lock_fname, "/usr/tmp/htlock.XXXXXX", sizeof(lock_fname)-1);
  ! #endif
  !     lock_fname[sizeof(lock_fname)-1] = '\0';
  ! 
  !     if (mktemp(lock_fname) == NULL || lock_fname[0] == '\0')
  !     {
  ! 	fprintf (stderr, "Cannot assign name to lock file!\n");
  ! 	exit (1);
  !     }
  ! 
        lock_fd = popenf(p, lock_fname, O_CREAT | O_WRONLY | O_EXCL, 0644);
        if (lock_fd == -1)
        {
  --- 238,244 ----
        unlock_it.l_type   = F_UNLCK;  /* set exclusive/write lock */
        unlock_it.l_pid    = 0;        /* pid not actually interesting */
    
  !     expand_lock_fname (p);
        lock_fd = popenf(p, lock_fname, O_CREAT | O_WRONLY | O_EXCL, 0644);
        if (lock_fd == -1)
        {
  ***************
  *** 284,300 ****
    void
    accept_mutex_init(pool *p)
    {
  -     char lock_fname[256];
  - 
  -     strncpy(lock_fname, "/usr/tmp/htlock.XXXXXX", sizeof(lock_fname)-1);
  -     lock_fname[sizeof(lock_fname)-1] = '\0';
  -     
  -     if (mktemp(lock_fname) == NULL || lock_fname[0] == '\0')
  -     {
  - 	fprintf (stderr, "Cannot assign name to lock file!\n");
  - 	exit (1);
  -     }
    
        lock_fd = popenf(p, lock_fname, O_CREAT | O_WRONLY | O_EXCL, 0644);
        if (lock_fd == -1)
        {
  --- 283,290 ----
    void
    accept_mutex_init(pool *p)
    {
    
  +     expand_lock_fname (p);
        lock_fd = popenf(p, lock_fname, O_CREAT | O_WRONLY | O_EXCL, 0644);
        if (lock_fd == -1)
        {
  
  
  
  1.117     +1 -0      apache/src/httpd.h
  
  Index: httpd.h
  ===================================================================
  RCS file: /export/home/cvs/apache/src/httpd.h,v
  retrieving revision 1.116
  retrieving revision 1.117
  diff -C3 -r1.116 -r1.117
  *** httpd.h	1997/06/28 22:39:22	1.116
  --- httpd.h	1997/06/28 23:05:15	1.117
  ***************
  *** 126,131 ****
  --- 126,132 ----
    #endif
    #define DEFAULT_PIDLOG "logs/httpd.pid"
    #define DEFAULT_SCOREBOARD "logs/apache_runtime_status"
  + #define DEFAULT_LOCKFILE "logs/accept.lock"
    
    /* Define this to be what your HTML directory content files are called */
    #define DEFAULT_INDEX "index.html"
  
  
  

Re: cvs commit: apache/src http_conf_globals.h http_config.c http_core.c http_main.c httpd.h

Posted by Dean Gaudet <dg...@arctic.org>.
On Sat, 28 Jun 1997, Marc Slemko wrote:
> No they aren't.  They _DO_ the same thing but they aren't the same thing.
>
> Would it be valid to put NULL there?  No.  Is it valid to put 0 there?
> Not IMHO.

ANSI says that 0 and NULL are interchangeable for pointers.  In fact
"#define NULL (0)" is a correct definition of NULL.  Most system choose to
make it ((void *)0) to open up error reporting opportunities. 

'\0' == ((char)0) by definition of \octal.  And the lvalue casting rules
make char x = 0 the same as char x = '\0'. 

I could be talking out of my butt though ;) 

> But in any case, I am about to remove that line entirely because it is
> bogus; snprintf always null terminates a string anyway.  Good way to solve
> a problem.  <g>

phfffft!

Dean


Re: cvs commit: apache/src http_conf_globals.h http_config.c http_core.c http_main.c httpd.h

Posted by Marc Slemko <ma...@worldgate.com>.
On Sat, 28 Jun 1997, Dean Gaudet wrote:

> > >     #endif
> > >     #endif /* WIN32 */
> > >     
> > >   + #if defined(USE_FCNTL_SERIALIZED_ACCEPT) || defined(USE_FLOCK_SERIALIZED_ACCEPT)
> > >   + static void expand_lock_fname(pool *p)
> > >   + {
> > >   +     char buf[20];
> > >   + 
> > >   +     ap_snprintf( buf, sizeof(buf)-1, ".%u", getpid() );
> > >   +     buf[sizeof(buf)-1] = 0;
> > 
> > This should be '\0', not 0.
> 
> They're the same thing.
> 

No they aren't.  They _DO_ the same thing but they aren't the same thing.

Would it be valid to put NULL there?  No.  Is it valid to put 0 there?
Not IMHO.

But in any case, I am about to remove that line entirely because it is
bogus; snprintf always null terminates a string anyway.  Good way to solve
a problem.  <g>


Re: cvs commit: apache/src http_conf_globals.h http_config.c http_core.c http_main.c httpd.h

Posted by Dean Gaudet <dg...@arctic.org>.
On Sat, 28 Jun 1997, Marc Slemko wrote:

> On Sat, 28 Jun 1997, Dean Gaudet wrote:
> 
> >   ***************
> >   *** 970,975 ****
> >   --- 970,980 ----
> >         return NULL;
> >     }
> >     
> >   + const char *set_lockfile (cmd_parms *cmd, void *dummy, char *arg) {
> >   +     lock_fname = pstrdup (cmd->pool, arg);
> >   +     return NULL;
> >   + }
> >   + 
> 
> This code should check to see if it is in a virtual server and whine if
> so. 

Yep.  But I think I'm done for today.

> 
> >     #endif
> >     #endif /* WIN32 */
> >     
> >   + #if defined(USE_FCNTL_SERIALIZED_ACCEPT) || defined(USE_FLOCK_SERIALIZED_ACCEPT)
> >   + static void expand_lock_fname(pool *p)
> >   + {
> >   +     char buf[20];
> >   + 
> >   +     ap_snprintf( buf, sizeof(buf)-1, ".%u", getpid() );
> >   +     buf[sizeof(buf)-1] = 0;
> 
> This should be '\0', not 0.

They're the same thing.

Dean


Re: cvs commit: apache/src http_conf_globals.h http_config.c http_core.c http_main.c httpd.h

Posted by Marc Slemko <ma...@znep.com>.
On Sat, 28 Jun 1997, Dean Gaudet wrote:

>   ***************
>   *** 970,975 ****
>   --- 970,980 ----
>         return NULL;
>     }
>     
>   + const char *set_lockfile (cmd_parms *cmd, void *dummy, char *arg) {
>   +     lock_fname = pstrdup (cmd->pool, arg);
>   +     return NULL;
>   + }
>   + 

This code should check to see if it is in a virtual server and whine if
so. 

>     #endif
>     #endif /* WIN32 */
>     
>   + #if defined(USE_FCNTL_SERIALIZED_ACCEPT) || defined(USE_FLOCK_SERIALIZED_ACCEPT)
>   + static void expand_lock_fname(pool *p)
>   + {
>   +     char buf[20];
>   + 
>   +     ap_snprintf( buf, sizeof(buf)-1, ".%u", getpid() );
>   +     buf[sizeof(buf)-1] = 0;

This should be '\0', not 0.