The same lock is used while rendering progress and while printing messages, and the lock is not reentrant. As a result, if the render function tries to write a message, perhaps via tracing, it will hang.
This can probably be avoided but it should at least be documented.
Similarly if rendering causes an attempt to update the model then that would also cause a deadlock.