octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Bugs blocking the 6.1 release


From: Markus Mützel
Subject: Re: Bugs blocking the 6.1 release
Date: Thu, 14 May 2020 21:24:02 +0200

Am 13. Mai 2020 um 20:18 Uhr schrieb "John W. Eaton":
> We have three bugs tagged as blockers for the 6.1 release:
>
>    * GUI hangs on use of uiputfile
>      https://savannah.gnu.org/bugs/index.php?52840
>      (Apparently MacOS only?
>
>    * Segmentation faults with clang when running the test suite
>      https://savannah.gnu.org/bugs/index.php?57591
>      (Intermittent failure that happens only with Clang?)
>
>    * handles to private functions may fail after "clear functions"
>      https://savannah.gnu.org/bugs/index.php?57439
>      (Also revealed many function handle issues.)
>
> I'm not sure what to do about the first two but I've been working on
> function handle issues related to the third one.  I have a series of
> pending changes that you can see here:
>
>    https://hg.octave.org/octave-jwe

I built from your repository and see 4 failing tests. All seem to be related to 
loading binary files:

>>>>> processing 
>>>>> /home/osboxes/Documents/Repositories/Octave/octave-jwe/scripts/plot/util/hgload.m
***** test
 unwind_protect
   h1 = figure ("visible", "off");
   col = get (h1, "color");
   ftmp = [tempname() ".ofig"];
   hgsave (h1, ftmp);
   close (h1);
   [h2, old] = hgload (ftmp);
   assert (old, {[]});
   [h3, old] = hgload (ftmp, struct ("color", [1 0 0]));
   assert (get (h3, "color"), [1 0 0]);
   assert (iscell (old) && numel (old) == 1);
   assert (isstruct (old{1}) && isfield (old{1}, "color"));
   assert (old{1}.color, col);
 unwind_protect_cleanup
   unlink (ftmp);
   try, close (h1); end_try_catch
   try, close (h2); end_try_catch
   try, close (h3); end_try_catch
 end_unwind_protect
!!!!! test failed
load: trouble reading binary file ''


>>>>> processing 
>>>>> /home/osboxes/Documents/Repositories/Octave/octave-jwe/scripts/plot/util/openfig.m
***** test
 unwind_protect
   h1 = figure ("visible", "off");
   ftmp = [tempname() ".ofig"];
   hgsave (h1, ftmp);
   close (h1);
   h2 = openfig (ftmp, "new", "invisible");
   h3 = openfig (ftmp, "reuse");
   assert (h2 == h3);
   close (h2);
 unwind_protect_cleanup
   unlink (ftmp);
   try, close (h1); end_try_catch
   try, close (h2); end_try_catch
   try, close (h3); end_try_catch
 end_unwind_protect
!!!!! test failed
load: trouble reading binary file ''

>>>>> processing 
>>>>> /home/osboxes/Documents/Repositories/Octave/octave-jwe/.build/libinterp/octave-value/ov-fcn-handle.cc-tst
***** test <*33857>
 a = 2;
 f = @(x) a + x;
 g = @(x) 2 * x;
 hm = @version;
 hdld = @svd;
 hbi = @log2;
 f2 = f;
 g2 = g;
 hm2 = hm;
 hdld2 = hdld;
 hbi2 = hbi;
 modes = {"-text", "-binary"};
 if (isfield (__octave_config_info__, "HAVE_HDF5")
     && __octave_config_info__ ("HAVE_HDF5"))
   modes(end+1) = "-hdf5";
 endif
 for i = 1:numel (modes)
   mode = modes{i};
   nm = tempname ();
   unwind_protect
     f2 (1);
     save (mode, nm, "f2", "g2", "hm2", "hdld2", "hbi2");
     clear f2 g2 hm2 hdld2 hbi2
     load (nm);
     assert (f (2), f2 (2));
     assert (g (2), g2 (2));
     assert (g (3), g2 (3));
     unlink (nm);
     save (mode, nm, "f2", "g2", "hm2", "hdld2", "hbi2");
   unwind_protect_cleanup
     unlink (nm);
   end_unwind_protect
 endfor
!!!!! regression: https://octave.org/testfailure/?33857
load: trouble reading binary file '/tmp/oct-mmPcCN'
***** test <*35876>
 a = 2;
 f = @(x) a + x;
 g = @(x) 2 * x;
 hm = @version;
 hdld = @svd;
 hbi = @log2;
 f2 = f;
 g2 = g;
 hm2 = hm;
 hdld2 = hdld;
 hbi2 = hbi;
 modes = {"-text", "-binary"};
 if (isfield (__octave_config_info__, "HAVE_HDF5")
     && __octave_config_info__ ("HAVE_HDF5"))
   modes(end+1) = "-hdf5";
 endif
 for i = 1:numel (modes)
   mode = modes{i};
   nm = tempname ();
   unwind_protect
     fcn_handle_save_recurse (2, mode, nm, f2, g2, hm2, hdld2, hbi2);
     clear f2 g2 hm2 hdld2 hbi2
     [f2, f2, hm2, hdld2, hbi2] = fcn_handle_load_recurse (2, nm);
     load (nm);
     assert (f (2), f2 (2));
     assert (g (2), g2 (2));
     assert (g (3), g2 (3));
     unlink (nm);
     fcn_handle_save_recurse (2, mode, nm, f2, g2, hm2, hdld2, hbi2);
   unwind_protect_cleanup
     unlink (nm);
   end_unwind_protect
 endfor
!!!!! regression: https://octave.org/testfailure/?35876
load: trouble reading binary file '/tmp/oct-2qXYGZ'


I'll try and cross-compile for Windows next. I'll report if I should run into 
any issues or better if it fixes the performance issue.

> Another change that will eventually be needed is to modify function
> handles to hold a weak_ptr reference to the actual function object.
> That way, handles that are used after functions are cleared can noticed
> that the function was cleared an properly attempt to reload them.
> Ultimately, this change is the one that will correctly fix the bug that
> motivated all of these other changes(!).  But until that is done, at
> least Octave won't fail and the performance issue that Philip noticed on
> Windows systems will be minimized.
>
> I've been working on stable with the idea that these changes could be
> applied to stable and included in the release.  I know that this is a
> big set of changes to push at the last minute, but it seems best to me
> to make handles to nested functions actually work properly since that
> was one of the big changes that was supposed to happen in version 6.

I get your point that this is quite a large set of changes shortly before a 
release. But the performance on Windows - especially if Octave is installed on 
a HDD - is appalling at the moment.
So if this is necessary to get the interpreter to a state in which it is 
possible to actually work with it, I wouldn't mind to delay the release another 
few weeks (or whatever is necessary).

Markus



reply via email to

[Prev in Thread] Current Thread [Next in Thread]