Skip to content

Commit 79ce368

Browse files
committed
BF: always close sockets, don't double-close
1 parent 7c40e24 commit 79ce368

File tree

3 files changed

+22
-18
lines changed

3 files changed

+22
-18
lines changed

pymatbridge/matlab/matlabserver.m

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,7 @@ function matlabserver(socket_address, exit_when_done)
1212
json_startup;
1313
messenger('init', socket_address);
1414

15-
if nargin > 1 && exit_when_done
16-
c = onCleanup(@stop_messenger_and_exit);
17-
else
18-
c = onCleanup(@stop_messenger);
19-
end
15+
c = onCleanup(@stop_messenger);
2016

2117
while(1)
2218
msg_in = messenger('listen');
@@ -35,22 +31,21 @@ function matlabserver(socket_address, exit_when_done)
3531

3632
case {'separate'}
3733
desktop; %no-op if desktop is already up
38-
c = onCleanup(@stop_messenger);
3934
break;
4035

4136
otherwise
42-
messenger('respond', 'i dont know what you want');
37+
messenger('respond', 'Unknown command recieved by matlabserver via ZMQ.');
4338

4439
end
4540
end
4641

47-
end %matlabserver
48-
49-
function stop_messenger_and_exit()
50-
messenger('exit');
42+
if nargin > 1 && exit_when_done
43+
c.task();
5144
exit;
5245
end
5346

47+
end %matlabserver
48+
5449
function stop_messenger()
5550
messenger('exit');
5651
end

pymatbridge/messenger/src/messenger.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,12 @@ void mexFunction(int nlhs, mxArray *plhs[],
143143
}
144144
/* Close the socket and context */
145145
} else if (strcmp(cmd, "exit") == 0) {
146-
cleanup();
147-
p[0] = 1;
146+
if (initialized) {
147+
cleanup();
148+
p[0] = 1;
149+
} else {
150+
mexErrMsgTxt("No open socket to exit.");
151+
}
148152
} else if (strcmp(cmd, "check") == 0) {
149153
if (initialized) {
150154
p[0] = 1;

pymatbridge/pymatbridge.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -241,8 +241,11 @@ def _response(self, **kwargs):
241241
def separate(self):
242242
if not self.started:
243243
raise ValueError('Session not started, use start()')
244-
if self._response(cmd='separate') == 'exit':
245-
self.logger.info("%s split off", self._program_name())
244+
if self._response(cmd='separate') != 'exit':
245+
raise ValueError('Failed to separate from {}'.format(self._program_name))
246+
self.socket.close()
247+
self.context.term()
248+
self.logger.info("%s split off", self._program_name())
246249
self.started = False
247250
return True
248251

@@ -252,9 +255,11 @@ def stop(self):
252255
return True
253256

254257
# Matlab should respond with "exit" if successful
255-
if self._response(cmd='exit') == "exit":
256-
self.logger.info("%s closed", self._program_name())
257-
258+
if self._response(cmd='exit') != "exit":
259+
raise ValueError("Failed to stop {}".format(self._program_name))
260+
self.socket.close()
261+
self.context.term()
262+
self.logger.info("%s closed", self._program_name())
258263
self.started = False
259264
return True
260265

0 commit comments

Comments
 (0)