Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

lib/setup moodelib: Introducing moodle_request_shutdown()

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.
  • Loading branch information...
commit 89d684979321b30f80deef1ffb2cf06187100fcd 1 parent c4269c1
martinlanghoff authored
Showing with 30 additions and 0 deletions.
  1. +25 −0 lib/moodlelib.php
  2. +5 −0 lib/setup.php
View
25 lib/moodlelib.php
@@ -6477,6 +6477,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
View
5 lib/setup.php
@@ -224,6 +224,11 @@
}
+/// 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()) {
/**
Please sign in to comment.
Something went wrong with that request. Please try again.