| SYNOPSIS |
| int <lfun> (int refcount) |
| int <closure>(int ref, object ob) |
| |
| DESCRIPTION |
| The hook H_CLEAN_UP defines a lfun or a closure used to clean |
| up an object. In older drivers this was hardwired to the lfun |
| clean_up(). |
| |
| The function is applied by the driver when an object hasn't been |
| used for a long time, to give it a chance to self-destruct. The |
| refcount <ref> passed as argument will be 0 for clone objects, |
| 1 for a simple loaded object, and greater when the object is |
| cloned or inherited by some existing object. It is recommended |
| not to self_destruct the object when the reference count is |
| greater than one. |
| |
| By convention, a refcount < 0 is used if some other object |
| asks the called object to clean_up. |
| |
| If the function is a closure, the second argument <ob> is the |
| object to clean up. |
| |
| If the hook specifies a non-existing lfun, or if the call |
| returns 0, no further attempt to clean up this object will be made. |
| |
| Returning a non-zero value is only recommended when the reason |
| why the object can't self-destruct is likely to vanish without |
| the object being touched, that is, when no local function is |
| called in it, (and in compat mode also when the object is not |
| being moved around). |
| |
| A typical mud configuration defines the time to wait for |
| clean_up() so long that you can assert reset() has been |
| called since the object has been touched last time. |
| |
| EXAMPLES |
| A clone of /std/drink defines clean_up() to self-destruct if |
| it is empty, not carried a living being and not touched for |
| a long time. |
| |
| A room that inherits /std/room defines clean_up() to |
| self-destruct if it is neither inherited nor used as a |
| blueprint, is empty and was not entered for a long time. |
| |
| HISTORY |
| Before 3.2.1, the function was hardwired to the lfun clean_up(). |
| |
| SEE ALSO |
| reset(A), heart_beat(A), call_out(E), destruct(E), remove(A), |
| hooks(C) |