@@ -33,40 +33,38 @@ def add_observer(observer=nil, func=:update, &block)
33
33
begin
34
34
@mutex . lock
35
35
@observers [ observer ] = func
36
+ observer
36
37
ensure
37
38
@mutex . unlock
38
39
end
39
-
40
- observer
41
40
end
42
41
43
42
# @param [Object] observer the observer to remove
44
43
# @return [Object] the deleted observer
45
44
def delete_observer ( observer )
46
45
@mutex . lock
47
46
@observers . delete ( observer )
48
- @mutex . unlock
49
-
50
47
observer
48
+ ensure
49
+ @mutex . unlock
51
50
end
52
51
53
52
# Deletes all observers
54
53
# @return [CopyOnWriteObserverSet] self
55
54
def delete_observers
56
55
@mutex . lock
57
56
@observers . clear
58
- @mutex . unlock
59
-
60
57
self
58
+ ensure
59
+ @mutex . unlock
61
60
end
62
61
63
62
# @return [Integer] the observers count
64
63
def count_observers
65
64
@mutex . lock
66
- result = @observers . count
65
+ @observers . count
66
+ ensure
67
67
@mutex . unlock
68
-
69
- result
70
68
end
71
69
72
70
# Notifies all registered observers with optional args
@@ -75,7 +73,6 @@ def count_observers
75
73
def notify_observers ( *args , &block )
76
74
observers = duplicate_observers
77
75
notify_to ( observers , *args , &block )
78
-
79
76
self
80
77
end
81
78
@@ -86,7 +83,6 @@ def notify_observers(*args, &block)
86
83
def notify_and_delete_observers ( *args , &block )
87
84
observers = duplicate_and_clear_observers
88
85
notify_to ( observers , *args , &block )
89
-
90
86
self
91
87
end
92
88
@@ -96,17 +92,17 @@ def duplicate_and_clear_observers
96
92
@mutex . lock
97
93
observers = @observers . dup
98
94
@observers . clear
99
- @mutex . unlock
100
-
101
95
observers
96
+ ensure
97
+ @mutex . unlock
102
98
end
103
99
104
100
def duplicate_observers
105
101
@mutex . lock
106
102
observers = @observers . dup
107
- @mutex . unlock
108
-
109
103
observers
104
+ ensure
105
+ @mutex . unlock
110
106
end
111
107
112
108
def notify_to ( observers , *args )
0 commit comments