# File lib/mutex_fix.rb, line 16
16:   def unlock
17:     return unless @locked
18:     Thread.critical = true
19:     @locked = false
20:     begin
21:       t = @waiting.pop
22:       t.wakeup if t
23:     rescue ThreadError
24:       retry
25:     end
26:     Thread.critical = false
27:     begin
28:       t.run if t
29:     rescue ThreadError
30:     end
31:     self
32:   end