| 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) |