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.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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()) {
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user