Class DEBUGGER__::Mutex
In: lib/debug.rb
Parent: Object

Methods

lock   locked?   new   unlock  

Public Class methods

[Source]

    # File lib/debug.rb, line 23
23:   def initialize
24:     @locker = nil
25:     @waiting = []
26:     @locked = false;
27:   end

Public Instance methods

[Source]

    # File lib/debug.rb, line 33
33:   def lock
34:     return if Thread.critical
35:     return if @locker == Thread.current
36:     while (Thread.critical = true; @locked)
37:       @waiting.push Thread.current
38:       Thread.stop
39:     end
40:     @locked = true
41:     @locker = Thread.current
42:     Thread.critical = false
43:     self
44:   end

[Source]

    # File lib/debug.rb, line 29
29:   def locked?
30:     @locked
31:   end

[Source]

    # File lib/debug.rb, line 46
46:   def unlock
47:     return if Thread.critical
48:     return unless @locked
49:     unless @locker == Thread.current
50:       raise RuntimeError, "unlocked by other"
51:     end
52:     Thread.critical = true
53:     t = @waiting.shift
54:     @locked = false
55:     @locker = nil
56:     Thread.critical = false
57:     t.run if t
58:     self
59:   end

[Validate]