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'
       }
     ]
   },

Reply via email to