Not conclusive yet, as the client's only been running about three days, but it looks as though this simple fix solved the problem.
The answer seems to be that Thread::Semaphore is, ironically, not thread-safe.
In reply to Re^3: Semaphores failing to prevent race condition
by Llew_Llaw_Gyffes
in thread Semaphores failing to prevent race condition
by Llew_Llaw_Gyffes
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |