EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  <20182019  2020  2021  2022  2023  2024  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  <20182019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: Re: EDM X/Y Plot segfaults
From: Eric Norum <[email protected]>
To: Eric Norum <[email protected]>
Cc: Gregory Portmann <[email protected]>, Michael Chin <[email protected]>, EPICS Tech-Talk <[email protected]>
Date: Wed, 9 May 2018 11:38:25 -0700
Hmm…sorry to keep following up my own posting, but shortly after I sent the message containing what I though was a work-around I got another segfault.  It looks like that there are *lots* of places that can have null pointer dereferences in the methods invoked from xyGraphClass::executeDeferred.  I hope there are still seem edm maintainers out there that can help with this since my quick hack fix clearly isn’t going to work.

 found that hacking in the following changes seems to stop the segfaults and result in waveform display.  i suspect that there’s a better fix that involves not invoking this method when the pointers in question are invalid, but I don’t have any idea what that would entail.

diff -u baselib/xygraph.cc.orig baselib/xygraph.cc
--- baselib/xygraph.cc.orig 2018-05-09 10:49:02.055680000 -0700
+++ baselib/xygraph.cc 2018-05-09 10:52:04.804485000 -0700
@@ -6298,6 +6298,7 @@
   arrayNumPoints[i] = 0;
 
   for ( ii=0; ii<yPvCount[i]; ii++ ) {
+    if (!yPvData[i]) dyValue = 0; else
 
     // There are two views of pv types, Type and specificType; this uses
     // specificType
@@ -6413,7 +6414,7 @@
 
 #endif
 
-    dxValue = ( (double *) xPvData[i] )[ii];
+    if (xPvData[i]) dxValue = ( (double *) xPvData[i] )[ii]; else dxValue = 0;
 
     if ( xAxisStyle == XYGC_K_AXIS_STYLE_LOG10 ) {
       dxValue = loc_log10(  dxValue  );


On May 9, 2018, at 10:28 AM, Eric Norum <[email protected]> wrote:

Displaying X/Y data in EDM on OS X and Linux often results in a segmentation fault.  Here’s where the fault occurs:

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff1f16f3c in xyGraphClass::genChronoVector (this=0x96c6f0, i=0, 
    rescale=0x7fffffffc2ec) at ../xygraph.cc:6344
6344       dyValue = ( (double *) yPvData[i] )[ii];
(gdb) where
#0  0x00007ffff1f16f3c in xyGraphClass::genChronoVector (this=0x96c6f0, i=0, 
    rescale=0x7fffffffc2ec) at ../xygraph.cc:6344
#1  0x00007ffff1f1c186 in xyGraphClass::executeDeferred (this=0x96c6f0)
    at ../xygraph.cc:9599
#2  0x00007ffff7afe07d in activeWindowClass::processObjects (this=0x927880)
    at ../act_win.cc:22289
#3  0x00007ffff7af5858 in appContextClass::applicationLoop (this=0x636d20)
    at ../app_pkg.cc:6592
#4  0x0000000000405562 in main (argc=<value optimized out>, 
    argv=<value optimized out>) at ../main.cc:2806
(gdb) list
6339       else {
6340         dyValue = (double) ( (unsigned short *) yPvData[i] )[ii];
6341       }
6342       break;
6343     default:
6344       dyValue = ( (double *) yPvData[i] )[ii];
6345       break;
6346     }
6347
6348     if ( y1AxisStyle[yi] == XYGC_K_AXIS_STYLE_LOG10 ) {
(gdb) print yPvData
$3 = {0x0 <repeats 20 times>}
(gdb) print &yPvData
$4 = (void *(*)[20]) 0x96f240
(gdb) print i
$5 = 0
(gdb) print yPvData[0]
$6 = (void *) 0x0
(gdb) 

For some reason yPvData is full of null pointers which results in a segfault when dereferenced by the [ii] subscript.
Any ideas why this happens sometimes?   I can get a good display maybe two or three times in a row and then get the segfault.

— 
Eric Norum


Replies:
Re: EDM X/Y Plot segfaults Bruce Hill
References:
EDM X/Y Plot segfaults Eric Norum

Navigate by Date:
Prev: RE: Keithley 2634B Source Meter Kline, David
Next: Re: Keithley 2634B Source Meter Hartman, Steven M.
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  <20182019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: Re: EDM X/Y Plot segfaults Eric Norum
Next: Re: EDM X/Y Plot segfaults Bruce Hill
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  <20182019  2020  2021  2022  2023  2024 
ANJ, 23 May 2018 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·