SYNOPSIS
void low_memory(int what, int limitvalue, int memory, int reservestate)
DESCRIPTION
This efun is called when there is a (potential) low-memory situation.
Two different limits for the amount of allocated memory can be
configured: a soft limit and a hard limit. If the soft limit is
exceeded, the driver calls low_memory() but does nothing else.
If the hard limit is exceeded, the driver calls low_memory() as well,
but initiates a garbage collection directly after the call. The efun
is called as well directly before a user-initiated garbage collection
is started.
<what> denotes the type of limit which was exceeded:
- NO_MALLOC_LIMIT_EXCEEDED (0)
No limit was exceeded, but a garbage collection was requested by a
call to garbage_collection() and it will begin right after
low_memory() returns.
- SOFT_MALLOC_LIMIT_EXCEEDED (1)
The soft limit was exceeded.
- HARD_MALLOC_LIMIT_EXCEEDED (2)
The hard limit was exceeded. A garbage collection will begin right
after low_memory() returns.
<limit> specifies the numerical value of the limit which was exceeded.
It is 0 in case of NO_MALLOC_LIMIT_EXCEEDED.
<memory> specifies the amount of allocated memory right now.
<reservestate> specifies the current state of the memory reserves of
the driver. The states of the 3 different reserves are OR'ed together.
- USER_RESERVE_AVAILABLE (1)
The user reserve is available.
- MASTER_RESERVE_AVAILABLE (2)
The master reserve is available.
- SYSTEM_RESERVE_AVAILABLE (4)
The system reserve is available.
This efun might be used to inform users about the garbage collection
and the expected long lag.
Another possibility is to initiate a garbage collection deliberately
at a suitable time (e.g. during the following night) after the soft
limit was hit.
REMARKS
If in a low_memory condition when the memory reserves have been used
already and they could not be re-allocated after a garbage collection
slow_shut_down() is called instead of calling this function again.
HISTORY
Introduced in 3.3.719
SEE ALSO
debug_info(E), garbage_collection(E), slow_shut_down(M), memory(C)
malloc(D)
|