How to handle "Buffer Pool Full" error

How to handle "Buffer Pool Full" error

What is this error?

Monolith will squawk a "Buffer Pool Full" error when all the pools in the buffer pool are used up in the current patch. This can happen with large patches or when making heavy use of things like cabtmp and holding cables (see cables).

When this error happens it is shuts down graforge on a global scale, which makes it tricky to recover from.

Graforge (and therefore monolith) will not move until the global error flag has been reset.

Recovering during a live coding session

Here is how you fix it.

First, correct your patch but DO NOT RE-EVALUATE. The usual culprit is holding too many cables. The easiest thing to do is use cabnew instead of cabtmp, which will explicitely allocate a new buffer.

Next, reset the error flag. In scheme this is done with (monolith:reset-err).

Free all the buffers being held in scheme with (bunholdall).

Clear all the runt registers with (regclrall).

Zero out monolith with (out 0).

Recompile the patch.

This can also be done with the function monolith:unbork.

Option 2: rescaling the buffer pool

Another issue could be that the buffer pool is too small. By default, the buffer pool size is 8, and the stack size is 10.

The following command will re-allocate the pool size to be 16, the stack size 18, and the block size to be 64 (64 is the default, it's a good number).

(monolith:realloc 16 18 64)