SYNOPSIS
        void garbage_collection()
        void garbage_collection(string filename)
        void garbage_collection(string filename, int flag)

DESCRIPTION
        Tell the parser to initiate a garbage collection after the
        current execution ended. Depending on the type of memory
        allocator used, this GC is more less thorough.

        If the 'smalloc' memory allocator is used, the GC produces
        output to a log file. The default name of the log file is
        specified at program start, but can be modified at runtime:

            With the <filename> argument a log file for the GC output
            different from the default log file can be specified.

            If <flag> is not given or 0, the output from the next
            and only the next GC will go into the log file. If the file
            already exists, the new output will be appended.

            If <flag> is 1, the <filename> will be used as the new
            default log file for all following GCs. If the file already
            exists, it will be overwritten from the start.

        If a different memory allocator is used, the GC does not produce
        output and the <filename> and <flag> arguments are ignored.

        Calling this efun causes a privilege_violation.

EXAMPLES
        garbage_collection()
         [ GC occurs -> logs into default file ]

        garbage_collection("/GCLOG")
         [ GC occurs -> logs into "/GCLOG" ]

        garbage_collection("/GCLOG", 1)
         [ GC occurs -> logs into "/GCLOG", sets default log to "/GCLOG" ]

        garbage_collection("/GCLOG")
        garbage_collection("/GCLOG2")
         [ GC occurs -> logs into "/GCLOG" ]

        garbage_collection("/GCLOG", 1)
        garbage_collection("/GCLOG2")
         [ GC occurs -> logs into "/GCLOG2", sets default log to "/GCLOG" ]

HISTORY
        LDMud 3.2.9 added the <filename> argument.
        LDMud 3.3.209 added the <flag> argument.
        LDMUd 3.5.0 made the efun privileged.

SEE ALSO
        rusage(E), valid_write(M), privilege_violation(M)
