"Oliver Woodford" wrote in message <email@example.com>... > "Anthony Halley" wrote: > > Did you ever find a nice solution for this issue? If so, I'd be interested in hearing about it. > > Yes. Walter Roberson pointed out the properties of the handle class to me, including it's ability to call a clean up function, here: > http://www.mathworks.com/matlabcentral/newsreader/view_thread/283309 > > So the solution is to define a class which inherits the handle class, something like this: > > classdef myclass < handle > properties (Hidden = true, SetAccess = private) > cpp_handle; > end > methods > % Constructor > function this = myclass() > this.cpp_handle = init_mex(); > end > % Destructor > function delete(this) > clear_mex(this.cpp_handle); > end > % Example method > function output = action(this, data) > output = action_mex(this.cpp_handle, data); > end > end > end > > I was going to post this when I'd used and tested it, but your question prompted me to post it earlier. As a result, it may not be exactly right, but hopefully you get the gist. > > Oliver
I have found this approach useful. Thanks for the code.
Below is the issue I am facing.
I have created a structure in my mex code and I am outputting it to MATLAB by creating a pointer to it and then casting it as a uint64_t. I am able to pass this into another mex function and decode the data perfectly. All this is as suggested in this thread and it works.
When I try to do the same thing but now within a parfor loop MATLAB crashes with a message saying "a worker aborted during execution ... ". The psuedo code is written below:
parfor 1:n  = some_other_mex_function(outputhandle,...); end ---------------------
I know I am passing the same pointer to multiple cores which share the memory, and all of them might be trying to access the data at the same time. Could this be the issue? If so any suggestions to overcome this would be helpful.