[kepler-dev] fix for ptolemy matlab actor
cxh at eecs.berkeley.edu
Wed Jan 16 11:46:08 PST 2008
Thanks, the change looks good, I folded it into the tree.
We should be doing a beta release at the end of this month, so your
change is very timely.
Matlab failing after the second run has been a long standing issue.
I've just started using the ptolemy matlab expression actor
(ptolemy.matlab.Expression) and I was finding the problem that
multiple runs would cause a crash.
You could always run a model once but if you invoked it a second
time without restarting ptolemy (i.e. press run, stop, run, stop)
it would crash when stopping the second run.
I tracked down the issue to ptmatlab.cc in the routine
Java_ptolemy_matlab_Engine_ptmatlabEngClose. It was deleting the
output buffer before closing the matlab engine and without letting
the matlab engine know not to use it. A solution would be to
either call engOutputBuffer(ep, NULL, 0) before destroying the
memory, or to simply delay destroying the memory until after the
matlab engine instance is closed. I chose the latter and now I can
run it fine without any crashes.
I have attached my version of ptmatlab.cc. It has this change plus
a few fflush(stdout) statements after the logging printfs. This is
important as without them the java and the C log will use
different buffers and you cannot verify the correct calling order.
More information about the Kepler-dev