httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dean Gaudet <dgau...@arctic.org>
Subject Re: general/1056: USE_FLOCK_SERIALIZED_ACCEPT is no use.
Date Fri, 05 Sep 1997 00:29:38 GMT
I really can't believe this one ... could a freebsd person start up a
server, then ktrace/truss/whatever a few of the pids and make sure only
one of them is in accept() ? 

Dean

On Tue, 26 Aug 1997, Tetsuya Furukawa wrote:

> 
> >Number:         1056
> >Category:       general
> >Synopsis:       USE_FLOCK_SERIALIZED_ACCEPT is no use.
> >Confidential:   no
> >Severity:       non-critical
> >Priority:       medium
> >Responsible:    apache (Apache HTTP Project)
> >State:          open
> >Class:          sw-bug
> >Submitter-Id:   apache
> >Arrival-Date:   Tue Aug 26 04:40:02 1997
> >Originator:     tetsuya@secom-sis.co.jp
> >Organization:
> apache
> >Release:        1.2.1
> >Environment:
> FreeBSD 2.1.7.1-RELEASE, FreeBSD 2.2-STABLE
> >Description:
> If USE_FLOCK_SERIALIZED_ACCEPT is defined,
> 1. First, the parent will create a lock file and get the file descriptor
>    associated with the file in accept_mutex_init().
> 2. Then, the children will intend to do flock() on the descriptor
>    in accept_mutex_on() and accept_mutex_off().
> 
> The flock(lock_fd, LOCK_EX) will always success without blocking in the case.
> I think it isn't the expected action.
> However, it doesn't currently seem to cause any problem on FreeBSD.
> >How-To-Repeat:
> At the next of the line ``accept_mutex_on();'', insert
> ``log_printf(server_conf, "accept_mutex_on: %d", (int)getpid());''.
> Then make, install and start the Apache on the FreeBSD system.
> You'll see the multiple "accept_mutex_on: xxxx" in the error log
> even if no client accesses the server.
> >Fix:
> I made a patch.
> It seems to work fine on my system.
> --------
> --- http_main.c.original        Tue Aug 26 20:15:21 1997
> +++ http_main.c Tue Aug 26 20:15:12 1997
> @@ -271,7 +271,7 @@
>         fprintf (stderr, "Cannot open lock file\n");
>         exit (1);
>      }
> -    unlink(lock_fname);
> +    pclosef(p, lock_fd);
>  }
>  
>  void accept_mutex_on()
> @@ -1228,6 +1228,9 @@
>  void sig_term() {
>      log_error("httpd: caught SIGTERM, shutting down", server_conf);
>      cleanup_scoreboard();
> +#if defined(USE_FLOCK_SERIALIZED_ACCEPT)
> +    unlink(lock_fname);
> +#endif
>      ap_killpg (pgrp, SIGKILL);
>      close(sd);
>      exit(1);
> @@ -1665,6 +1668,16 @@
>      dupped_csd = -1;
>      child_num = child_num_arg;
>      requests_this_child = 0;
> +    
> +#if defined(USE_FLOCK_SERIALIZED_ACCEPT)
> +    lock_fd = popenf(pconf, lock_fname, O_WRONLY, 0);
> +    if (lock_fd == -1)
> +    {
> +       perror ("open");
> +       fprintf (stderr, "Cannot open lock file\n");
> +       exit (1);
> +    }
> +#endif
>  
>      reopen_scoreboard(pconf);
>      (void)update_child_status(child_num, SERVER_READY, (request_rec*)NULL);
> -------
> >Audit-Trail:
> >Unformatted:
> 
> 
> 


Mime
View raw message