Other threads *are* allowed to add() to the end of the buffer, but nothing else. Releasing the interpreter lock for just doing that should not be necessary?
Without releasing the interpreter lock, no other pike threads can run, which means they can't call add() (even if they are allowed to).