File tree Expand file tree Collapse file tree 1 file changed +40
-10
lines changed
app/server/ruby/lib/sonicpi Expand file tree Collapse file tree 1 file changed +40
-10
lines changed Original file line number Diff line number Diff line change 11
11
# notice is included.
12
12
#++
13
13
14
+ require_relative "util"
15
+
14
16
module SonicPi
15
17
class LifeCycleHooks
16
18
19
+ include Util
20
+
17
21
# Life cycle hooks for jobs
18
22
19
23
def initialize
@@ -23,65 +27,91 @@ def initialize
23
27
@exited_blocks = [ ]
24
28
@all_completed_blocks = [ ]
25
29
@mut = Mutex . new
30
+ @started = false
31
+ end
32
+
33
+ def ensure_not_started!
34
+ if @started
35
+ raise StandardError "Cannot modify life cycle hooks once started"
36
+ end
26
37
end
27
38
28
39
def on_init ( &blck )
29
40
@mut . synchronize do
41
+ ensure_not_started!
30
42
@started_blocks << blck
31
43
end
32
44
end
33
45
34
46
def on_completed ( &blck )
35
47
@mut . synchronize do
48
+ ensure_not_started!
36
49
@completed_blocks << blck
37
50
end
38
51
end
39
52
40
53
def on_killed ( &blck )
41
54
@mut . synchronize do
55
+ ensure_not_started!
42
56
@killed_blocks << blck
43
57
end
44
58
end
45
59
46
60
def on_exit ( &blck )
47
61
@mut . synchronize do
62
+ ensure_not_started!
48
63
@exited_blocks << blck
49
64
end
50
65
end
51
66
52
67
def on_all_completed ( &blck )
53
68
@mut . synchronize do
69
+ ensure_not_started!
54
70
@all_completed_blocks << blck
55
71
end
56
72
end
57
73
58
74
def init ( job_id , arg = { } )
59
- @started_blocks . each do |b |
60
- b . call ( job_id , arg )
75
+ log "Lifecycle Hooks Init"
76
+ @mut . synchronize do
77
+ @started = true
78
+ @started_blocks . each do |b |
79
+ b . call ( job_id , arg )
80
+ end
61
81
end
62
82
end
63
83
64
84
def completed ( job_id , arg = { } )
65
- @completed_blocks . each do |b |
66
- b . call ( job_id , arg )
85
+ log "Lifecycle Hooks Completed"
86
+ @mut . synchronize do
87
+ @completed_blocks . each do |b |
88
+ b . call ( job_id , arg )
89
+ end
67
90
end
68
91
end
69
92
70
93
def all_completed ( silent = false )
71
- @all_completed_blocks . each do |b |
72
- b . call ( silent )
94
+ log "Lifecycle Hooks All Completed"
95
+ @mut . synchronize do
96
+ @all_completed_blocks . each do |b |
97
+ b . call ( silent )
98
+ end
73
99
end
74
100
end
75
101
76
102
def killed ( job_id , arg = { } )
77
- @killed_blocks . each do |b |
78
- b . call ( job_id , arg )
103
+ @mut . synchronize do
104
+ @killed_blocks . each do |b |
105
+ b . call ( job_id , arg )
106
+ end
79
107
end
80
108
end
81
109
82
110
def exit ( job_id , arg = { } )
83
- @exited_blocks . each do |b |
84
- b . call ( job_id , arg )
111
+ @mut . synchronize do
112
+ @exited_blocks . each do |b |
113
+ b . call ( job_id , arg )
114
+ end
85
115
end
86
116
end
87
117
end
You can’t perform that action at this time.
0 commit comments