www-apache-bugdb mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ralf S. Engelschall" <...@engelschall.com>
Subject Re: mod_rewrite/3874: RewriteLock doesn't work for virtual hosts and silently fails
Date Wed, 10 Mar 1999 13:10:06 GMT
The following reply was made to PR mod_rewrite/3874; it has been noted by GNATS.

From: "Ralf S. Engelschall" <rse@engelschall.com>
To: apbugs@apache.org
Cc:  Subject: Re: mod_rewrite/3874: RewriteLock doesn't work for virtual hosts and silently
Date: Wed, 10 Mar 1999 13:54:57 +0100

 In article <19990210212537.10345.qmail@hyperreal.org> you wrote:
 > The lock file is opened during the init_child() phase and the file pointer is
 > saved in that server_rec, but that config info isn't propagated to the virtual 
 > host config.  Since the file pointer isn't available, even though locking is 
 > turned on, no locking is done and no warning is given and things break.
 > Add a logging line to rewritelock_alloc() like
 >     if (conf->rewritelockfp != -1) {
 >         fd_lock(r, conf->rewritelockfp);
 >     } else if (conf->rewritelockfile) {
 >       ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ALERT, r,
 >                    "mod_rewrite: Don't have lockfile descriptor, can't lock");
 >     }
 > then use RewriteLock and RewriteMap inside and outside of a virtual host
 > and you'll see that the lockfile fp isn't available through the virtual
 > host config, so no locking is done.
 > I moved the
 >         rewritelock_open(s, p);
 > call from the init_child() function to the server for loop in 
 > init_module() where the rewritelog open is as well, and that seems
 > to have fixed it.
 You're right that there might be a problem caused by the fact that the
 filedescriptor isn't merged into virtual host.  But your solution (moving the
 rewritelock_open call to the init_module function) is incorrect, because this
 doesn't work on platforms where flock() is used.  Because under flock() based
 locking the file _has_ to be opened by the child. So the only solution seems
 to be to interate in init_child() over the virtual hosts.  I'll look at
                                        Ralf S. Engelschall

View raw message