Hi António:

On 2021-06-05 20:53+0100 António Rodrigues Tomé wrote:

Hi Alan,

I hope you are well and managed to be free of the virus.

So far so good.  And I hope that is true for everyone on this list
and their close families!

new versions of QT5 produce some warnings about the use of  deprecated
functions in the driver.
The new qt6 will remove most of the obsolete functions,  unless one uses an
additional back compatibility module. Namely the  QLinkedList will no
longer be supported in qt6.

So I send you a patch where I replace all the functions that (my qt5.15.2
versions) warns about.
I think that everything will work fine even with older qt versions,

This was needed mainly because for qt6 it will be necessary.

Thanks, António for making this effort to future-proof the PLplot qt component.
You are very close to something I would be happy to push, but there is
a regression in results that you need to fix in your patch.

Here are the details concerning that regression.

Your patch builds fine here on my Debian Buster = Stable with qt5.11.3
platform and gives good run-time test results when I build the
test_pyqt5_example (other than some deprecation warnings that eventually
do need to be fixed), test_qt_example, and test_memqt_example targets

However, it introduces a segfault regression when I attempt to build
the test_c_qtwidget target.

The previous (before your patch was applied) result for that target showed no 
warnings or errors for that target.  And there continue to be no warnings with 
this target when your patch is applied.  However,
here is the error result for that case:
Generate C results for qtwidget interactive device
Testing subset of C examples for device qtwidget
x01c
x04c
x08c
x16c
x24c
x30c
x14c
/home/software/plplot/HEAD/build_dir/plplot_test/test_c_interactive.sh: line 47:  3746 Segmentation fault 
     $DEBUG_CMD "$cdir"/x${index}${lang} -dev $device $NP_OPTION 2> 
c_interactive_${device}_test.error >| "${OUTPUT_DIR}"/x${index}${lang}_${device}.txt
make[3]: *** [examples/CMakeFiles/test_c_qtwidget.dir/build.make:58: 
examples/CMakeFiles/test_c_qtwidget] Error 1
make[2]: *** [CMakeFiles/Makefile2:6635: 
examples/CMakeFiles/test_c_qtwidget.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:6642: 
examples/CMakeFiles/test_c_qtwidget.dir/rule] Error 2
make: *** [Makefile:2108: test_c_qtwidget] Error 2

So it looks like all examples other than x14c work correctly with your patch, 
but
x14c (which has quite special needs) apparently exposes an issue with your 
patch.

In fact, after that test_c_qtwidget target was built (in order to build all
necessary prerequisites) I could replicate the above segfault with

software@merlin> examples/c/x14c -dev qtwidget
Demo of multiple output streams via the qtwidget driver.
Running with the second stream as slave to the first.

Segmentation fault

AND

for a *fresh* configuration and build with

software@merlin> printenv |grep FLAG
FFLAGS=-g
CXXFLAGS=-g
CFLAGS=-g

I confirmed the segfault (with these quite different compiler options)
and also obtained the attached valgrind result determined
from (after a build of the test_c_qtwidget target to build all prerequisites)

valgrind --num-callers=400 examples/c/x14c -dev qtwidget 2>| valgrind.out

Exactly the same test for the version of PLplot before your change
produces the following results (if I keep hitting the enter key when
the cursor was on the left-hand plot to proceed through the entire
example successfully):

software@merlin> valgrind --num-callers=400 examples/c/x14c -dev qtwidget
==9772== Memcheck, a memory error detector
==9772== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==9772== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
==9772== Command: examples/c/x14c -dev qtwidget
==9772== Demo of multiple output streams via the qtwidget driver.
Running with the second stream as slave to the first.

==9772== ==9772== HEAP SUMMARY:
==9772==     in use at exit: 526,787 bytes in 6,853 blocks
==9772==   total heap usage: 216,516 allocs, 209,663 frees, 39,317,429 bytes 
allocated
==9772== ==9772== LEAK SUMMARY:
==9772==    definitely lost: 6,888 bytes in 40 blocks
==9772==    indirectly lost: 5,109 bytes in 125 blocks
==9772==      possibly lost: 2,112 bytes in 6 blocks
==9772==    still reachable: 512,678 bytes in 6,682 blocks
==9772==         suppressed: 0 bytes in 0 blocks
==9772== Rerun with --leak-check=full to see details of leaked memory
==9772== ==9772== For counts of detected and suppressed errors, rerun with: -v
==9772== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)

So aside from some memory leaks (likely due to a Qt5-5.11.3 issue
rather than a PLplot issue) the 14th standard example runs perfectly
under valgrind before your patch.

I hope the attached detailed valgrind results for the segfault case
with your patch will help you to figure out how your patch needs to be
changed to fix this regression for the special needs of our 14th
standard example.

Also, for your next version of the patch will you please try all the relevant
test targets and then report those testing results in a "Tested by":
stanza similar to the following?

Tested by: António R. Tomé <art...@gmail.com> on the <specify your
platform details, e.g., Linux distribution name and version but also
including your qt5.15.2 version> platform by configuring PLplot,
building the test_pyqt5_example, test_qt_example, test_memqt_example,
and test_c_qtwidget targets with no configuration, build, run-time, or
GUI issues.

Because our two Qt5 platforms are so different it is essential to test on
both platforms.  So I plan to do these tests also and append my own "Tested 
by:" stanza to yours as
follows (once those tests all succeed):

Tested by: Alan W. Irwin <air...@users.sourceforge.net> on Linux
(Debian Buster = Stable with qt5.11.3) by configuring PLplot, building
the test_pyqt5_example, test_qt_example, test_memqt_example, and
test_c_qtwidget targets with no configuration, build, run-time, or GUI
issues.

By the way, what I mean by no GUI issues above is that for the test targets
that allow you to interact with a GUI (i.e., everything but
test_c_qtwidget which because of the -np option for that test just
runs through a critical subset of our standard examples automatically
with no user intervention), you have exercised all possible actions
(including exiting from the GUI which is always critical) to make sure
all those GUI actions work).

Also, if you have any trouble getting test_pyqt5_example to configure,
remember you have to have the latest python3 and sip development
packages installed for your platform.  Note I have included that
possibility (if you have time to test it) because it already generates
deprecated warnings here on my older platform, and it would be good to get
our pyqt5 example future-proofed as well.

For all those here wondering about the hiatus (for the last year now)
in my PLplot development work, the reason for that is I am spending
virtually 100 % of my current development time on FreeEOS with the
goal of getting out a critical release for that software soon which
will include all my work on modernizing that Fortran code (e.g., by
using Fortran 2008 best practices) and by comprehensively testing that
code's results.  So all that I have had time for from the PLplot
perspective is to monitor other's PLplot development activities and
help out where I can (as in the present segfault report to António).

Of course, after that FreeEOS release is completed, I do hope to
return to a more active PLplot development role starting with a fix to
a pllegend issue (incorrect vertical line spacing when there are
subscripts or superscripts in the legend text) that has been exposed
by many of the FreeEOS research plots I have been producing using
PLplot.  Of course, if you look back at the PLplot history, I first
got active in PLplot development because of PLplot issues turned up by
FreeEOS.  So it looks like my strong motivation for helping to develop
PLplot will be continuing just like always!  :-)

Alan
__________________________
Alan W. Irwin

Research affiliation with the Department of Physics and Astronomy,
University of Victoria, Victoria, BC, Canada.

Programming affiliations with the FreeEOS equation-of-state
implementation for stellar interiors (freeeos.sf.net); the Time
Ephemerides project (timeephem.sf.net); PLplot scientific plotting
software package (plplot.org); the libLASi project
(unifont.org/lasi); the Loads of Linux Links project (loll.sf.net);
and the Linux Brochure Project (lbproject.sf.net).
__________________________

Linux-powered Science
__________________________

Attachment: valgrind.out.gz
Description: valgrind report showing details of the segfault regression introduced by Antóni

_______________________________________________
Plplot-devel mailing list
Plplot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/plplot-devel

Reply via email to