I've described a problem with the implementation of Array shift in Ruby 1.8.4 here:
I believe that this is the source of the problem Mongrel had experienced with the Mutex and a memory leak.
I've described a possible (single line) solution to this in the article. What I am not completely sure of is what the intended semantics of shift actually is, consequently the suggested fix may be inappropriate. I'll leave that to someone else to decide.