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)