stas 2004/07/15 18:11:03
Modified: src/docs/2.0/api/Apache RequestUtil.pod ServerUtil.pod
src/docs/2.0/api/ModPerl RegistryLoader.pod
src/docs/2.0/user/handlers http.pod server.pod
src/docs/2.0/user/install install.pod
src/docs/2.0/user/performance prevent.pod
src/docs/2.0/user/porting compat.pod
Log:
sync with api changes
Revision Changes Path
1.25 +35 -0 modperl-docs/src/docs/2.0/api/Apache/RequestUtil.pod
Index: RequestUtil.pod
===================================================================
RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/Apache/RequestUtil.pod,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -u -r1.24 -r1.25
--- RequestUtil.pod 15 Jul 2004 20:51:08 -0000 1.24
+++ RequestUtil.pod 16 Jul 2004 01:11:03 -0000 1.25
@@ -64,6 +64,9 @@
# share perl objects like $r->notes
$r->pnotes($key => [$obj1, $obj2]);
+ # get HTML signature
+ $sig = $r->psignature($prefix);
+
# get the global request object (requires PerlOptions +GlobalRequest)
$r = Apache->request;
@@ -767,6 +770,38 @@
interface:
delete $r->pnotes->{foo};
+
+
+
+
+
+
+
+
+=head2 C<psignature>
+
+Get HTML describing the address and (optionally) admin of the server.
+
+ $sig = $r->psignature($prefix);
+
+=over 4
+
+=item obj: C<$r>
+( C<L<Apache::RequestRec|docs::2.0::api::Apache::RequestRec>> )
+
+=item arg1: C<$prefix> ( string )
+
+Text which is prepended to the return value
+
+=item ret: C<$sig> ( string )
+
+HTML text describing the server. Note that depending on the value of
+the C<ServerSignature> directive, the function may return the address,
+including the admin information or nothing at all.
+
+=item since: 1.99_15
+
+=back
1.25 +72 -45 modperl-docs/src/docs/2.0/api/Apache/ServerUtil.pod
Index: ServerUtil.pod
===================================================================
RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/Apache/ServerUtil.pod,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -u -r1.24 -r1.25
--- ServerUtil.pod 15 Jul 2004 20:51:08 -0000 1.24
+++ ServerUtil.pod 16 Jul 2004 01:11:03 -0000 1.25
@@ -12,8 +12,8 @@
$s = Apache->server;
my $srv_cfg = $s->dir_config;
- # get 'conf/' dir path using $s
- my $conf_dir = $s->server_root_relative('conf');
+ # get 'conf/' dir path using (avoid using this function!)
+ my $dir = Apache::ServerUtil::server_root_relative($r->pool, 'conf');
# server level PerlOptions flags lookup
$s->push_handlers(ChildExit => \&child_exit)
@@ -147,6 +147,9 @@
mod_perl/1.99_15-dev Perl/v5.8.5 Hikers, Inc/0.99999
configured -- resuming normal operations
+Also remember that the C<ServerTokens> directive value controls
+whether the component information is displayed or not.
+
@@ -456,36 +459,6 @@
-
-=head2 C<psignature>
-
-META: Autogenerated - needs to be reviewed/completed
-
-Get HTML describing the address and (optionally) admin of the server.
-
- $sig = $rXXXX->psignature($prefix);
-
-=over 4
-
-=item obj: C<$rXXX>
(C<L<Apache::RequestRec|docs::2.0::api::Apache::RequestRec>>)
-
-=item arg1: C<$prefix> ( string )
-
-Text which is prepended to the return value
-
-=item ret: C<$sig> ( string )
-
-HTML describing the server
-
-=item since: 1.99_10
-
-=back
-
-
-
-
-
-
=head2 C<push_handlers>
Add one or more handlers to a list of handlers to be called for a
@@ -563,6 +536,8 @@
+
+
=head2 C<server_root>
returns the value set by the top-level C<ServerRoot> directive.
@@ -584,25 +559,31 @@
-
-
-
=head2 C<server_root_relative>
Returns the canonical form of the filename made absolute to
C<ServerRoot>:
- $path = $s->server_root_relative($fname);
+ $path = Apache::ServerUtil::server_root_relative($pool, $fname);
=over 4
-=item obj: C<$s>
-( C<L<Apache::ServerRec object|docs::2.0::api::Apache::ServerRec>> )
+=item arg1: C<$pool>
+( C<L<APR::Pool object|docs::2.0::api::APR::Pool>> )
+
+Make sure that you read the following explanation and understand well
+which pool object you need to pass before using this function.
=item opt arg2: C<$fname> ( string )
=item ret: C<$path> ( string )
+The concatenation of C<ServerRoot> and the C<$fname>.
+
+If C<$fname> is not specified, the value of C<ServerRoot> is returned
+with a trailing C</>. (it's the same as using C<''> as C<$fname>'s
+value).
+
=item since: 1.99_10
=back
@@ -610,15 +591,61 @@
C<$fname> is appended to the value of C<ServerRoot> and returned. For
example:
- my $log_dir = Apache::server_root_relative($r->pool, 'logs');
+ my $dir = Apache::ServerUtil::server_root_relative($r->pool, 'logs');
+
+You must be extra-careful when using this function. If you aren't sure
+what you are doing don't use it.
+
+It's much safer to build the path by yourself using use
+C<L<Apache::ServerUtil::server_root()|/C_Apache__server_root_>>, For
+example:
+
+ use File::Spec::Functions qw(catfile);
+ my $path = catfile Apache::ServerUtil::server_root, qw(t logs);
+
+In this example, no memory allocation happens on the Apache-side and
+you aren't risking to get a memory leak.
+
+The problem with C<server_root_relative> is that Apache allocates
+memory to concatenate the path string. The memory is allocated from
+the pool object. If you call this method on the server pool object
+it'll allocate the memory from it. If you do that at the server
+startup, it's perfectly right, since you will do that only
+once. However if you do that from within a request or a connection
+handler, you create a memory leak every time it is called -- as the
+memory gets allocated from the server pool, it will be freed only when
+the server is shutdown. Therefore if you need to build a relative to
+the root server path for the duration of the request, use the request
+pool:
+
+ use Apache::RequestRec ();
+ Apache::ServerUtil::server_root_relative($r->pool, $fname);
+
+If you need to have the path for the duration of a connection
+(e.g. inside a protocol handler), you should use:
+
+ use Apache::Connection ();
+ Apache::ServerUtil::server_root_relative($c->pool, $fname);
+
+And if you want it for the scope of the server file:
+
+ use Apache::Process ();
+ use Apache::ServerUtil ();
+ Apache::ServerUtil::server_root_relative($s->process->pool, $fname);
+
+Moreover, you could have encountered the opposite problem, where you
+have used a short-lived pool object to construct the path, but tried
+to use the resulting path variable, when that pool has been destructed
+already. In order to avoid mysterious segmentation faults, mod_perl
+does a wasteful copy of the path string when returning it to you --
+another reason to avoid using this function.
+
+
+
+
+
-If C<$fname> is not specified, the value of C<ServerRoot> is returned
-with a trailing C</>. (it's the same as using C<''> as C<$fname>'s
-value).
-Also see the
-C<L<Apache::ServerUtil::server_root|/C_Apache__server_root_>>
-constant.
1.4 +9 -9 modperl-docs/src/docs/2.0/api/ModPerl/RegistryLoader.pod
Index: RegistryLoader.pod
===================================================================
RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/ModPerl/RegistryLoader.pod,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -u -r1.3 -r1.4
--- RegistryLoader.pod 19 Jan 2004 20:04:32 -0000 1.3
+++ RegistryLoader.pod 16 Jul 2004 01:11:03 -0000 1.4
@@ -6,9 +6,9 @@
# in startup.pl
use ModPerl::RegistryLoader ();
- use APR::Pool ();
+ use File::Spec ();
- # explicit uri => filename mapping
+ # explicit uri => filename mapping
my $rlbb = ModPerl::RegistryLoader->new(
package => 'ModPerl::RegistryBB',
debug => 1, # default 0
@@ -19,9 +19,9 @@
###
# uri => filename mapping using a helper function
sub trans {
- my $uri = shift;
+ my $uri = shift;
$uri =~ s|^/registry/|cgi-bin/|;
- return Apache::Server::server_root_relative(APR::Pool->new, $uri);
+ return File::Spec->catfile(Apache::ServerUtil::server_root, $uri);
}
my $rl = ModPerl::RegistryLoader->new(
package => 'ModPerl::Registry',
@@ -129,18 +129,18 @@
{
# test the scripts pre-loading by using trans sub
use ModPerl::RegistryLoader ();
- use APR::Pool ();
+ use File::Spec ();
use DirHandle ();
use strict;
- my $pool = APR::Pool->new;
-
- my $dir = Apache::Server::server_root_relative($pool, "cgi-bin");
+ my $dir = File::Spec->catdir(Apache::ServerUtil::server_root,
+ "cgi-bin");
sub trans {
my $uri = shift;
$uri =~ s|^/registry/|cgi-bin/|;
- return Apache::Server::server_root_relative($pool, $uri);
+ return File::Spec->catfile(Apache::ServerUtil::server_root,
+ $uri);
}
my $rl = ModPerl::RegistryLoader->new(
1.42 +4 -2 modperl-docs/src/docs/2.0/user/handlers/http.pod
Index: http.pod
===================================================================
RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/handlers/http.pod,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -u -r1.41 -r1.42
--- http.pod 15 Jul 2004 20:51:08 -0000 1.41
+++ http.pod 16 Jul 2004 01:11:03 -0000 1.42
@@ -168,7 +168,7 @@
my $r = shift;
$r->content_type('text/plain');
- my $conf_file = catfile $r->server_root_relative,
+ my $conf_file = catfile Apache::ServerUtil::server_root,
"conf", "httpd.conf";
printf "$conf_file is %0.2f minutes old\n", 60*24*(-M $conf_file);
@@ -1278,7 +1278,9 @@
use Apache::RequestRec ();
use Apache::Connection ();
+
use Fcntl qw(:flock);
+ use File::Spec::Functions qw(catfile);
use Apache::Const -compile => qw(OK DECLINED);
@@ -1292,7 +1294,7 @@
$r->connection->remote_ip, scalar(localtime),
$r->uri, $r->status, $r->bytes_sent;
- my $log_path = join '/', $r->server_root_relative,
+ my $log_path = catfile Apache::ServerUtil::server_root,
"logs", "$username.log";
open my $fh, ">>$log_path" or die "can't open $log_path: $!";
flock $fh, LOCK_EX;
1.18 +5 -8 modperl-docs/src/docs/2.0/user/handlers/server.pod
Index: server.pod
===================================================================
RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/handlers/server.pod,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -u -r1.17 -r1.18
--- server.pod 15 Jul 2004 20:51:08 -0000 1.17
+++ server.pod 16 Jul 2004 01:11:03 -0000 1.18
@@ -68,12 +68,12 @@
use Apache::Const -compile => 'OK';
- my $log_file = catfile "logs", "startup_log";
+ my $log_path = catfile Apache::ServerUtil::server_root,
+ "logs", "startup_log";
my $log_fh;
sub open_logs {
my($conf_pool, $log_pool, $temp_pool, $s) = @_;
- my $log_path = $s->server_root_relative($log_file);
$s->warn("opening the log file: $log_path");
open $log_fh, ">>$log_path" or die "can't open $log_path: $!";
@@ -232,7 +232,6 @@
sub open_logs {
my($conf_pool, $log_pool, $temp_pool, $s) = @_;
- my $log_path = $s->server_root_relative($log_file);
$s->warn("opening the log file: $log_path");
open $log_fh, ">>$log_path" or die "can't open $log_path: $!";
@@ -242,11 +241,9 @@
return Apache::OK;
}
-In our example the handler uses the function
-C<Apache::Server::server_root_relative()> to set the full path to the log
-file, which is then opened for appending and set to unbuffered
-mode. Finally it logs the fact that it's running in the parent
-process.
+In our example the handler opens a log file for appending and sets the
+filehandle to unbuffered mode. It then logs the fact that it's running
+in the parent process.
As you've seen in the example this handler is configured by adding to
the top level of I<httpd.conf>:
1.58 +3 -5 modperl-docs/src/docs/2.0/user/install/install.pod
Index: install.pod
===================================================================
RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/install/install.pod,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -u -r1.57 -r1.58
--- install.pod 12 Jul 2004 23:13:22 -0000 1.57
+++ install.pod 16 Jul 2004 01:11:03 -0000 1.58
@@ -439,12 +439,10 @@
in I<httpd.conf> or:
- use Apache::ServerRec ();
use Apache::ServerUtil ();
- use Apache::Process ();
- my $pool = Apache->server->process->pool;
- push @INC, Apache::Server::server_root_relative($pool, "");
- push @INC, Apache::Server::server_root_relative($pool, "lib/perl");
+ use File::Spec::Functins qw(catfile);
+ push @INC, catfile Apache::ServerUtil::server_root, "";
+ push @INC, catfile Apache::ServerUtil::server_root, "lib/perl";
in I<startup.pl>.
1.3 +3 -3 modperl-docs/src/docs/2.0/user/performance/prevent.pod
Index: prevent.pod
===================================================================
RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/performance/prevent.pod,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -u -r1.2 -r1.3
--- prevent.pod 19 Jan 2004 20:04:32 -0000 1.2
+++ prevent.pod 16 Jul 2004 01:11:03 -0000 1.3
@@ -31,11 +31,11 @@
can. Never use server pools during request, when you can use a request
pool. For example inside an HTTP handler, don't call:
- my $conf_dir = Apache::Server::server_root_relative($s->pool, 'conf');
+ my $dir = Apache::ServerUtil::server_root_relative($s->process->pool,
'conf');
-when you can call:
+when you should call:
- my $conf_dir = Apache::Server::server_root_relative($r->pool, 'conf');
+ my $dir = Apache::ServerUtil::server_root_relative($r->pool, 'conf');
Of course on special occasions, you may want to have something
allocated off the server pool if you want the allocated memory to
1.58 +12 -14 modperl-docs/src/docs/2.0/user/porting/compat.pod
Index: compat.pod
===================================================================
RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/porting/compat.pod,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -u -r1.57 -r1.58
--- compat.pod 15 Jul 2004 20:51:09 -0000 1.57
+++ compat.pod 16 Jul 2004 01:11:03 -0000 1.58
@@ -1054,33 +1054,31 @@
C<L<Apache::compat|docs::2.0::api::Apache::compat>>. 2.0 handlers only
need to set the I<Content-type> via C<$r-E<gt>content_type($type)>.
-=head2 C<$r-E<gt>server_root_relative>
-C<Apache::server_root_relative> is a function in 2.0 and its first
-argument is the I<pool> object. For example:
- # during request
- my $conf_dir = Apache::server_root_relative($r->pool, 'conf');
- # during startup
- my $conf_dir = Apache::server_root_relative($s->pool, 'conf');
-Alternatively:
+
+=head2 C<$r-E<gt>server_root_relative>
+
+This method was replaced with
+C<L<Apache::ServerUtil::server_root_relative|docs::2.0::Apache::ServerUtil/C_server_root_relative_>>
+function and its first argument is a I<pool> object. For example:
# during request
- my $conf_dir = $r->server_root_relative('conf');
+ $conf_dir = Apache::server_root_relative($r->pool, 'conf');
# during startup
- my $conf_dir = $c->server_root_relative('conf');
+ $conf_dir = Apache::server_root_relative($s->pool, 'conf');
Note that the old form
my $conf_dir = Apache->server_root_relative('conf');
-is no longer valid - C<Apache::server_root_relative> must be called
-from either one of C<$r>, C<$s>, or C<$c>, or be explicitly
-passed a pool.
+is no longer valid - C<Apache::server_root_relative> must be
+explicitly passed a pool.
+The old functionality is available with
+C<L<Apache::compat|docs::2.0::api::Apache::compat>>.
-See the L<Apache::ServerUtil> manpage.
=head2 C<$r-E<gt>hard_timeout>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]