mud/lib/secure/daemon/reaper.c
2020-09-06 05:43:07 -07:00

75 lines
1.8 KiB
C

/*
* Seeks dummy items without an environment and destroys them.
* Hackey workaround to sloppy code I'm still tracking down.
* -Crat 21Jan06
*
* Started as a hackey workaround to a dummy problem, but
* it turns out that periodically destructing cloned
* objects without an environment is a pretty good idea.
* see the reaper.c sefun file for how the dests happen
* and what objects are exempted.
* -Crat 28Jul06
*/
#include <lib.h>
#include <daemons.h>
inherit LIB_DAEMON;
static void eventReap() {
call_out((: eventReap :), 300);
reap_dummies();
reap_other();
reclaim_objects();
}
static void CheckMem(){
call_out((: CheckMem :), 60);
if(MEMUSE_SOFT_LIMIT && memory_info() > MEMUSE_SOFT_LIMIT){
reap_dummies();
reset_eval_cost();
reap_other();
reset_eval_cost();
reclaim_objects();
reset_eval_cost();
MASTER_D->RequestReset();
}
if(MEMUSE_HARD_LIMIT && memory_info() > MEMUSE_HARD_LIMIT){
reap_dummies();
reset_eval_cost();
reap_other();
reset_eval_cost();
reclaim_objects();
reset_eval_cost();
MASTER_D->RequestReset();
if(memory_info() > MEMUSE_HARD_LIMIT){
if(!EVENTS_D->GetRebooting()){
EVENTS_D->eventReboot(MINUTES_REBOOT_WARNING);
}
}
}
}
static void create() {
daemon::create();
SetNoClean(1);
call_out((: eventReap :), 300);
call_out((: CheckMem :), 60);
set_heart_beat(5);
}
static void heart_beat(){
#ifdef __FLUFFOS__
if(sizeof(get_garbage()) > 20000){
reap_other();
}
#endif
}
int eventDestruct(){
if( !(master()->valid_apply(({ "SECURE" }))) )
error("Illegal attempt to destruct reaper: "+get_stack()+" "+identify(previous_object(-1)));
return ::eventDestruct();
}