Author: stas Date: Thu Dec 2 15:29:58 2004 New Revision: 109589 URL: http://svn.apache.org/viewcvs?view=rev&rev=109589 Log: new API Apache::ServerUtil::restart_count() which can be used to tell whether the server is starting/restarting/gracefully restarting/etc.
Modified: perl/modperl/trunk/Changes perl/modperl/trunk/src/modules/perl/mod_perl.c perl/modperl/trunk/src/modules/perl/modperl_util.c perl/modperl/trunk/src/modules/perl/modperl_util.h perl/modperl/trunk/t/conf/modperl_extra.pl perl/modperl/trunk/t/response/TestAPI/server_util.pm perl/modperl/trunk/xs/Apache/ServerUtil/Apache__ServerUtil.h perl/modperl/trunk/xs/maps/modperl_functions.map perl/modperl/trunk/xs/tables/current/ModPerl/FunctionTable.pm Modified: perl/modperl/trunk/Changes Url: http://svn.apache.org/viewcvs/perl/modperl/trunk/Changes?view=diff&rev=109589&p1=perl/modperl/trunk/Changes&r1=109588&p2=perl/modperl/trunk/Changes&r2=109589 ============================================================================== --- perl/modperl/trunk/Changes (original) +++ perl/modperl/trunk/Changes Thu Dec 2 15:29:58 2004 @@ -12,6 +12,10 @@ =item 1.99_18-dev +new API Apache::ServerUtil::restart_count() which can be used to tell +whether the server is starting/restarting/gracefully +restarting/etc. [Stas] + provide perl glue for the mod_perl's base_server_pool via Apache::ServerUtil::base_server_pool() [Geoff, Stas] Modified: perl/modperl/trunk/src/modules/perl/mod_perl.c Url: http://svn.apache.org/viewcvs/perl/modperl/trunk/src/modules/perl/mod_perl.c?view=diff&rev=109589&p1=perl/modperl/trunk/src/modules/perl/mod_perl.c&r1=109588&p2=perl/modperl/trunk/src/modules/perl/mod_perl.c&r2=109589 ============================================================================== --- perl/modperl/trunk/src/modules/perl/mod_perl.c (original) +++ perl/modperl/trunk/src/modules/perl/mod_perl.c Thu Dec 2 15:29:58 2004 @@ -549,6 +549,8 @@ MP_init_status = 1; /* now starting */ + modperl_restart_count_inc(s); + apr_pool_create(&server_pool, pconf); apr_pool_tag(server_pool, "mod_perl server pool"); Modified: perl/modperl/trunk/src/modules/perl/modperl_util.c Url: http://svn.apache.org/viewcvs/perl/modperl/trunk/src/modules/perl/modperl_util.c?view=diff&rev=109589&p1=perl/modperl/trunk/src/modules/perl/modperl_util.c&r1=109588&p2=perl/modperl/trunk/src/modules/perl/modperl_util.c&r2=109589 ============================================================================== --- perl/modperl/trunk/src/modules/perl/modperl_util.c (original) +++ perl/modperl/trunk/src/modules/perl/modperl_util.c Thu Dec 2 15:29:58 2004 @@ -797,3 +797,31 @@ } } + +#define MP_RESTART_COUNT_KEY "mod_perl_restart_count" + +/* passing the main server object here, just because we don't have the + * modperl_server_pool available yet, later on we can access it + * through the modperl_server_pool() call. + */ +void modperl_restart_count_inc(server_rec *base_server) +{ + void *data; + int cnt = 1; + apr_pool_t *p = base_server->process->pool; + apr_pool_userdata_get(&data, MP_RESTART_COUNT_KEY, p); + if (data) { + cnt = (int)data + 1; + } + + apr_pool_userdata_set((const void *)cnt, MP_RESTART_COUNT_KEY, + apr_pool_cleanup_null, p); +} + +int modperl_restart_count(void) +{ + void *data; + apr_pool_userdata_get(&data, MP_RESTART_COUNT_KEY, + modperl_global_get_server_rec()->process->pool); + return data ? (int)data : 0; + } Modified: perl/modperl/trunk/src/modules/perl/modperl_util.h Url: http://svn.apache.org/viewcvs/perl/modperl/trunk/src/modules/perl/modperl_util.h?view=diff&rev=109589&p1=perl/modperl/trunk/src/modules/perl/modperl_util.h&r1=109588&p2=perl/modperl/trunk/src/modules/perl/modperl_util.h&r2=109589 ============================================================================== --- perl/modperl/trunk/src/modules/perl/modperl_util.h (original) +++ perl/modperl/trunk/src/modules/perl/modperl_util.h Thu Dec 2 15:29:58 2004 @@ -139,4 +139,10 @@ : (char *)apr_psprintf(p, "%s...", \ apr_pstrmemdup(p, str, MP_TRACE_STR_LEN)) +/* functions maintaining the amount of times mod_perl was restarted, + * e.g. on Apache start, it restarts itself, so the count will be + * first 1, and on on restart 2 */ +void modperl_restart_count_inc(server_rec *base_server); +int modperl_restart_count(void); + #endif /* MODPERL_UTIL_H */ Modified: perl/modperl/trunk/t/conf/modperl_extra.pl Url: http://svn.apache.org/viewcvs/perl/modperl/trunk/t/conf/modperl_extra.pl?view=diff&rev=109589&p1=perl/modperl/trunk/t/conf/modperl_extra.pl&r1=109588&p2=perl/modperl/trunk/t/conf/modperl_extra.pl&r2=109589 ============================================================================== --- perl/modperl/trunk/t/conf/modperl_extra.pl (original) +++ perl/modperl/trunk/t/conf/modperl_extra.pl Thu Dec 2 15:29:58 2004 @@ -207,8 +207,13 @@ my $base_server_pool = Apache::ServerUtil::base_server_pool(); $base_server_pool->cleanup_register(sub { Apache::OK }); # replace the sub with the following to get some visual debug - # should log the date twice (once on -start, once more on -stop) - # sub { local %ENV; qx[/bin/date >> /tmp/date]; Apache::OK; } + # should log cnt:1 on -start, oncand cnt: 2 -stop followed by cnt: 1) + #$base_server_pool->cleanup_register( sub { + # my $cnt = Apache::ServerUtil::restart_count(); + # open my $fh, ">>/tmp/out" or die "$!"; + # print $fh "cnt: $cnt\n"; + # close $fh; + #}); # # also remember that cleanup_register() called on this pool will # work only when registered at the server startup Modified: perl/modperl/trunk/t/response/TestAPI/server_util.pm Url: http://svn.apache.org/viewcvs/perl/modperl/trunk/t/response/TestAPI/server_util.pm?view=diff&rev=109589&p1=perl/modperl/trunk/t/response/TestAPI/server_util.pm&r1=109588&p2=perl/modperl/trunk/t/response/TestAPI/server_util.pm&r2=109589 ============================================================================== --- perl/modperl/trunk/t/response/TestAPI/server_util.pm (original) +++ perl/modperl/trunk/t/response/TestAPI/server_util.pm Thu Dec 2 15:29:58 2004 @@ -29,7 +29,7 @@ sub handler { my $r = shift; - plan $r, tests => 17; + plan $r, tests => 18; { my $s = $r->server; @@ -55,6 +55,9 @@ # process $base_server_pool->cleanup_register(sub { Apache::OK }); ok 1; + + # on start we get 1, and immediate restart gives 2 + ok t_cmp Apache::ServerUtil::restart_count, 2, "restart count"; Apache::OK; } Modified: perl/modperl/trunk/xs/Apache/ServerUtil/Apache__ServerUtil.h Url: http://svn.apache.org/viewcvs/perl/modperl/trunk/xs/Apache/ServerUtil/Apache__ServerUtil.h?view=diff&rev=109589&p1=perl/modperl/trunk/xs/Apache/ServerUtil/Apache__ServerUtil.h&r1=109588&p2=perl/modperl/trunk/xs/Apache/ServerUtil/Apache__ServerUtil.h&r2=109589 ============================================================================== --- perl/modperl/trunk/xs/Apache/ServerUtil/Apache__ServerUtil.h (original) +++ perl/modperl/trunk/xs/Apache/ServerUtil/Apache__ServerUtil.h Thu Dec 2 15:29:58 2004 @@ -13,9 +13,11 @@ * limitations under the License. */ +#define mpxs_Apache__ServerUtil_restart_count modperl_restart_count + #define mpxs_Apache__ServerUtil_base_server_pool modperl_server_pool -#define mpxs_Apache__ServerRec_method_register(s, methname) \ +#define mpxs_Apache__ServerRec_method_register(s, methname) \ ap_method_register(s->process->pconf, methname); #define mpxs_Apache__ServerRec_add_version_component(s, component) \ Modified: perl/modperl/trunk/xs/maps/modperl_functions.map Url: http://svn.apache.org/viewcvs/perl/modperl/trunk/xs/maps/modperl_functions.map?view=diff&rev=109589&p1=perl/modperl/trunk/xs/maps/modperl_functions.map&r1=109588&p2=perl/modperl/trunk/xs/maps/modperl_functions.map&r2=109589 ============================================================================== --- perl/modperl/trunk/xs/maps/modperl_functions.map (original) +++ perl/modperl/trunk/xs/maps/modperl_functions.map Thu Dec 2 15:29:58 2004 @@ -82,6 +82,7 @@ MODULE=Apache::ServerUtil PACKAGE=Apache::ServerUtil mpxs_Apache__ServerUtil_server_root_relative | | p, fname="" apr_pool_t:DEFINE_base_server_pool + int:DEFINE_restart_count PACKAGE=Apache server_rec *:DEFINE_server | | SV *:classname=Nullsv Modified: perl/modperl/trunk/xs/tables/current/ModPerl/FunctionTable.pm Url: http://svn.apache.org/viewcvs/perl/modperl/trunk/xs/tables/current/ModPerl/FunctionTable.pm?view=diff&rev=109589&p1=perl/modperl/trunk/xs/tables/current/ModPerl/FunctionTable.pm&r1=109588&p2=perl/modperl/trunk/xs/tables/current/ModPerl/FunctionTable.pm&r2=109589 ============================================================================== --- perl/modperl/trunk/xs/tables/current/ModPerl/FunctionTable.pm (original) +++ perl/modperl/trunk/xs/tables/current/ModPerl/FunctionTable.pm Thu Dec 2 15:29:58 2004 @@ -2,7 +2,7 @@ # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # ! WARNING: generated by ModPerl::ParseSource/0.01 -# ! Sat Nov 27 13:31:12 2004 +# ! Thu Dec 2 18:00:28 2004 # ! do NOT edit, any changes will be lost ! # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -4482,6 +4482,21 @@ { 'type' => 'request_rec *', 'name' => 'r' + } + ] + }, + { + 'return_type' => 'int', + 'name' => 'modperl_restart_count', + 'args' => [] + }, + { + 'return_type' => 'void', + 'name' => 'modperl_restart_count_inc', + 'args' => [ + { + 'type' => 'server_rec *', + 'name' => 'main_server' } ] },