On 2017-09-30 19:22-0700 Alan W. Irwin wrote:
Anyhow, thanks very much for this fix, and I have changed the status
of https://sourceforge.net/p/plplot/bugs/174/ to closed-fixed.
I have just discovered a really strange problem with your recent
-eofill fix (commit b603fd22). The issue is that valgrind results on C
and Fortran standard examples show no memory-management issues, and
you would expect that good result would continue with all bindings
since your commit made changes only to C language files associated
with our core C library and not the bindings. However, for some
strange reason your change does cause segfaults for all C++ examples
and all devices that I have tried for those examples whenever the
-eofill option is used. There are no such issues when the -eofill
option is not used.
Here are typical valgrind results for the two cases where I
have chosen to use one of our simpler C++ examples (x00)
and one of our simpler devices (svg).
software@raven> valgrind examples/c++/x00 -dev svg -o test.svg
==1930== Memcheck, a memory error detector
==1930== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==1930== Using Valgrind-3.10.0 and LibVEX; rerun with -h for copyright info
==1930== Command: examples/c++/x00 -dev svg -o test.svg
==1930==
==1930==
==1930== HEAP SUMMARY:
==1930== in use at exit: 0 bytes in 0 blocks
==1930== total heap usage: 463 allocs, 463 frees, 148,933 bytes allocated
==1930==
==1930== All heap blocks were freed -- no leaks are possible
==1930==
==1930== For counts of detected and suppressed errors, rerun with: -v
==1930== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
software@raven> valgrind examples/c++/x00 -dev svg -o test.svg -eofill
==1931== Memcheck, a memory error detector
==1931== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==1931== Using Valgrind-3.10.0 and LibVEX; rerun with -h for copyright info
==1931== Command: examples/c++/x00 -dev svg -o test.svg -eofill
==1931==
==1931== Invalid read of size 8
==1931== at 0x5C3656E: plP_state (plcore.c:257)
==1931== by 0x5C24C42: opt_eofill (plargs.c:2845)
==1931== by 0x5C22BED: ProcessOpt (plargs.c:1140)
==1931== by 0x5C22A1D: ParseOpt (plargs.c:1068)
==1931== by 0x5C22779: c_plparseopts (plargs.c:935)
==1931== by 0x4E40719: plstream::parseopts(int*, char**, int)
(plstream.cc:1283)
==1931== by 0x400C4C: x00::x00(int, char**) (x00.cc:59)
==1931== by 0x400D92: main (x00.cc:79)
==1931== Address 0x48 is not stack'd, malloc'd or (recently) free'd
==1931==
==1931==
==1931== Process terminating with default action of signal 11 (SIGSEGV)
==1931== Access not within mapped region at address 0x48
==1931== at 0x5C3656E: plP_state (plcore.c:257)
==1931== by 0x5C24C42: opt_eofill (plargs.c:2845)
==1931== by 0x5C22BED: ProcessOpt (plargs.c:1140)
==1931== by 0x5C22A1D: ParseOpt (plargs.c:1068)
==1931== by 0x5C22779: c_plparseopts (plargs.c:935)
==1931== by 0x4E40719: plstream::parseopts(int*, char**, int)
(plstream.cc:1283)
==1931== by 0x400C4C: x00::x00(int, char**) (x00.cc:59)
==1931== by 0x400D92: main (x00.cc:79)
==1931== If you believe this happened as a result of a stack
==1931== overflow in your program's main thread (unlikely but
==1931== possible), you can try to increase the size of the
==1931== main thread stack using the --main-stacksize= flag.
==1931== The main thread stack size used in this run was 8388608.
==1931==
==1931== HEAP SUMMARY:
==1931== in use at exit: 29,775 bytes in 265 blocks
==1931== total heap usage: 314 allocs, 49 frees, 74,436 bytes allocated
==1931==
==1931== LEAK SUMMARY:
==1931== definitely lost: 0 bytes in 0 blocks
==1931== indirectly lost: 0 bytes in 0 blocks
==1931== possibly lost: 0 bytes in 0 blocks
==1931== still reachable: 29,775 bytes in 265 blocks
==1931== suppressed: 0 bytes in 0 blocks
==1931== Rerun with --leak-check=full to see details of leaked memory
==1931==
==1931== For counts of detected and suppressed errors, rerun with: -v
==1931== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
Segmentation fault
1930 (without -eofill) shows perfect valgrind results while 1931 shows
shows showstopping (segfault) memory management issues with -eofill.
I hope you can figure out this peculiar issue with your fix because
it has me completely stumped!
Alan
__________________________
Alan W. Irwin
Astronomical research affiliation with Department of Physics and Astronomy,
University of Victoria (astrowww.phys.uvic.ca).
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.sf.net); 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
__________________________
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Plplot-devel mailing list
Plplot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/plplot-devel