The current spawn() function in src/runtime/run-program.c appears to be subtly wrong on OpenBSD when used with a pty, and can cause the parent SBCL process to hang. This happens when the child exits before the parent process closes the *CLOSE-IN-PARENT* descriptors, specifically the descriptor for the slave side of the pty. In this case, the close blocks indefinitely.
Using the recommended method to set the controlling terminal seems to work better, and didn't cause any hangs in my 100,000-iteration test program. Attached is a patch which does this, tested on OpenBSD/amd64 and Linux/i386.