Re: Bugs blocking the 6.1 release

"Markus Mützel" <[email protected]>
Newsgroups gmane.comp.gnu.octave.maintainers
Message-ID <trinity-a194fa1f-7092-4e4a-959e-5f1bb64830b4-1589484242063@3c-app-gmx-bap34>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.