]> git.mjollnir.org Git - moodle.git/commitdiff
lib/setup moodelib: Introducing moodle_request_shutdown()
authormartinlanghoff <martinlanghoff>
Thu, 5 Apr 2007 05:04:06 +0000 (05:04 +0000)
committermartinlanghoff <martinlanghoff>
Thu, 5 Apr 2007 05:04:06 +0000 (05:04 +0000)
Now Moodle will have a 'shutdown_function' function. Right now
registered (and useful) only when running under apache + mod_php.

This initial function checks whether memory usage in this process exceeded
10MiB or $CFG->apachemaxmem (int, in bytes). This is really useful to prevent
using more RAM than we have.

lib/moodlelib.php
lib/setup.php

index 9b8b0405c260c492acdc49029952b75249882099..7e02ee34754465c0759a6d81f70522417f7d6e81 100644 (file)
@@ -6499,6 +6499,31 @@ function fullclone($thing) {
 }
 
 
+/*
+ * This function expects to called during shutdown
+ * should be set via register_shutdown_function()
+ * in lib/setup.php .
+ * 
+ * Right now we do it only if we are under apache, to
+ * make sure apache children that hog too much mem are
+ * killed.
+ * 
+ */
+function moodle_request_shutdown() {
+
+    // initially, we are only ever called under apache 
+    // but check just in case 
+    if (function_exists('apache_child_terminate') && function_exists('memory_get_usage')) {
+        if (empty($CFG->apachemaxmem)) {
+            $CFG->apachemaxmem = 10000000; // default 10MiB
+        }
+        if (memory_get_usage() > (int)$CFG->apachemaxmem) {
+            trigger_error('Mem usage over $CFG->apachemaxmem: marking child for reaping.');
+            apache_child_terminate();
+        }
+    }
+}
+
 /**
  * If new messages are waiting for the current user, then return
  * Javascript code to create a popup window
index 74405d61154b3d86e65e256a3d90bddccd326927..57c8587c813e332486f1788e295738472e65f4e1 100644 (file)
@@ -224,6 +224,11 @@ global $HTTPSPAGEREQUIRED;
     }
 
 
+/// For now, only needed under apache (and probably unstable in other contexts)
+    if (function_exists('apache_child_terminate')) {
+        register_shutdown_function('moodle_request_shutdown');
+    }
+
 //// Defining the site
     if ($SITE = get_site()) {
         /**