@@ -65,6 +65,7 @@ def inspect
65
65
66
66
STATE_CONNECTED = "connected"
67
67
STATE_DISCONNECTED = "disconnected"
68
+ STATE_CLOSED = "closed"
68
69
69
70
def available?
70
71
@state == STATE_CONNECTED
@@ -85,12 +86,14 @@ def initialize(
85
86
Syskit . conf . remote_process_managers_response_timeout ,
86
87
root_loader : Orocos . default_loader ,
87
88
register_on_name_server : true ,
88
- connect_executor : :io
89
+ connect_executor : :io ,
90
+ create_log_dir : true
89
91
)
90
92
@host = host
91
93
@port = port
92
94
@state = STATE_DISCONNECTED
93
95
@response_timeout = response_timeout
96
+ @create_log_dir = create_log_dir
94
97
95
98
@processes = { }
96
99
@death_queue = [ ]
@@ -135,11 +138,22 @@ def connect
135
138
136
139
def poll
137
140
case @state
141
+ when STATE_CLOSED
142
+ poll_in_closed_state
138
143
when STATE_DISCONNECTED
139
144
poll_in_disconnected_state
140
145
end
141
146
end
142
147
148
+ def poll_in_closed_state
149
+ # Read the output of the future if there is one, and close
150
+ # the possibly existing socket
151
+ return unless ( result = @connect_future &.result ( 0 ) )
152
+
153
+ result [ 1 ] &.close
154
+ @connect_future = nil
155
+ end
156
+
143
157
def poll_in_disconnected_state
144
158
if @connect_future
145
159
return unless ( result = @connect_future . result ( 0 ) )
@@ -174,14 +188,22 @@ def handle_new_connection(socket)
174
188
175
189
@server_pid = pid
176
190
@loader = Loader . new ( self , @root_loader )
191
+
192
+ if @create_log_dir
193
+ create_log_dir (
194
+ Roby . app . time_tag , { "parent" => Roby . app . app_metadata }
195
+ )
196
+ end
197
+ kill_all if Syskit . conf . kill_all_on_process_server_connection?
198
+
177
199
ProcessManagers . info "connected to remote process manager #{ self } "
178
200
rescue StandardError => e
179
201
ProcessManagers . warn (
180
202
"got a socket to remote process manager #{ self } , but the first " \
181
203
"call failed: #{ e . message } "
182
204
)
183
205
184
- close
206
+ close ( state : STATE_DISCONNECTED )
185
207
schedule_connection_attempt
186
208
end
187
209
@@ -392,9 +414,9 @@ def disconnect
392
414
close
393
415
end
394
416
395
- def close
396
- @state = STATE_DISCONNECTED
397
- @socket . close
417
+ def close ( state : STATE_CLOSED )
418
+ @state = state
419
+ @socket & .close
398
420
end
399
421
400
422
def write_command ( cmd , args = nil )
0 commit comments