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)
