[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB
From: |
Rik |
Subject: |
[Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB |
Date: |
Mon, 7 Dec 2020 13:11:14 -0500 (EST) |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36 |
Follow-up Comment #14, bug #59597 (project octave):
@jwe: Unfortunately my patch did not fix the bug, but do you understand
whether it is okay to use octave::feval rather than interp.feval? It seems
like the patch might be a good thing to apply anyways. For reference, here is
the entire mexCallMATLAB function from mex.cc.
int
mexCallMATLAB (int nargout, mxArray *argout[], int nargin,
mxArray *argin[], const char *fname)
{
octave_value_list args;
// FIXME: do we need unwind protect to clean up args? Off hand, I
// would say that this problem is endemic to Octave and we will
// continue to have memory leaks after Ctrl-C until proper exception
// handling is implemented.
// FIXME: Proper exception handling has been implemented (Jan. 2016).
// Can this code be re-factored?
args.resize (nargin);
for (int i = 0; i < nargin; i++)
args(i) = mxArray::as_octave_value (argin[i]);
octave::interpreter& interp = octave::__get_interpreter__
("mexCallMATLAB");
bool execution_error = false;
octave_value_list retval;
try
{
retval = octave::feval (fname, args, nargout);
// My proposed change below
//retval = interp.feval (fname, args, nargout);
}
catch (const octave::execution_exception&)
{
if (mex_context->trap_feval_error)
{
// FIXME: is there a way to indicate what error occurred?
// Should the error message be displayed here? Do we need to
// save the exception info for lasterror?
interp.recover_from_exception ();
execution_error = true;
}
else
{
args.resize (0);
retval.resize (0);
throw;
}
}
int num_to_copy = retval.length ();
if (nargout < retval.length ())
num_to_copy = nargout;
for (int i = 0; i < num_to_copy; i++)
{
// FIXME: it would be nice to avoid copying the value here,
// but there is no way to steal memory from a matrix, never mind
// that matrix memory is allocated by new[] and mxArray memory
// is allocated by malloc().
argout[i] = mex_context->make_value (retval(i));
}
while (num_to_copy < nargout)
argout[num_to_copy++] = nullptr;
return execution_error ? 1 : 0;
}
_______________________________________________________
Reply to this item at:
<https://savannah.gnu.org/bugs/?59597>
_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/
- [Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB, (continued)
- [Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB, Rik, 2020/12/04
- [Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB, Sébastien Villemot, 2020/12/04
- [Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB, Rik, 2020/12/04
- [Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB, Rik, 2020/12/05
- [Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB, Sébastien Villemot, 2020/12/07
- [Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB, Sébastien Villemot, 2020/12/07
- [Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB, Rik, 2020/12/07
- [Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB, Rik, 2020/12/07
- [Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB, Sébastien Villemot, 2020/12/07
- [Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB, John W. Eaton, 2020/12/07
- [Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB,
Rik <=
- [Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB, John W. Eaton, 2020/12/07
- [Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB, Sébastien Villemot, 2020/12/08
- [Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB, Guillaume, 2020/12/08
- [Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB, John W. Eaton, 2020/12/08
- [Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB, anonymous, 2020/12/09
- [Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB, Sébastien Villemot, 2020/12/09
- [Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB, anonymous, 2020/12/09
- [Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB, Sébastien Villemot, 2020/12/09
- [Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB, John W. Eaton, 2020/12/09
- [Octave-bug-tracker] [bug #59597] bogus result returned by mexCallMATLAB, John W. Eaton, 2020/12/11