[bug #4725] [GRASS-dev] still togl problems in NVIZ for volume

Hamish hamish_nospam at yahoo.com
Wed Aug 23 03:22:26 EDT 2006


Markus wrote:
> With tcltk <= 8.4.11 it crashes :-( Tested on RHEL4 and Mandriva2006.

latest 6.3-cvs on Debian/sarge with tcltk 8.4 [threaded] it crashes when
I try to [Add] a new isosurface. First time I tried it happened when
adding the 3rd isosurface, second time it segfaulted on the first surface.

I found this earlier:

=========================

from  https://intevation.de/rt/webrt?serial_num=4725

Wed, Jun 28 2006 12:13:10 	   	Mail sent by hbowman 	 


Hi,

"nviz volume=map3d" segfaults.. see bug report for spearfish example.


I've traced it back to incorrect mode in  nviz/src/volume.c
slice_get_drawmode()

mode=1969841253 (or so)
when it should be like DM_GOURAUD=256 or DM_FLAT=512

actual segfault seems to happen after slice_get_drawmode()'s
return (TCL_ERROR);
???

called from scripts/panel_vol.tcl line ~450:
    set Nv_(ShadeStyle) [Nvol$curr slice get_drawmode]



I followed "mode" into lib/ogsf/GVL2.c GVL_slice_get_drawmode()
and then *gvl to gvl_get_vol() in lib/ogsf/gvl.c, but then I get lost.


uninit'd variable?


Hamish



> Markus Neteler wrote:
> 
> > > With tcltk <= 8.4.11 it crashes :-( Tested on RHEL4 and
> > > Mandriva2006.
> > 
> > On Mandriva2006 it crashes like this:
> > 
> > Program received signal SIGSEGV, Segmentation fault.
> > [Switching to Thread -1238534432 (LWP 24083)]
> > 0xb7fa09d7 in gvl_read_char (pos=0, data=0x0) at gvl_calc.c:602
> > 602     {
> > (gdb) bt full
> > #0  0xb7fa09d7 in gvl_read_char (pos=0, data=0x0) at gvl_calc.c:602
> > No locals.
> > #1  0xb7fa1a17 in gvld_isosurf (gvl=0x8158d78) at gvld.c:248
> >         tx = 0.00224719103
> >         ty = 0.00224719103
> >         tz = 0.0224719103
> >         cols = 593
> >         rows = 340
> >         depths = 4
> >         x = 0
> >         y = 0
> >         z = 0
> >         i = Variable "i" is not available.
> 
> Both of these reports have a NULL data field in the geovol_isosurf
> structure. This field is NULL when the structure is initially created,
> and initialised by gvl_isosurf_calc() (gvl_calc.c:542).
> 
> gvld_vol() calls gvl_isosurf_calc() before calling gvld_isosurf(), so
> it appears that gvl_isosurf_calc() is failing to initialise the field
> for some reason.
> 
> I can only suggest single-stepping through gvl_isosurf_calc() to try
> to figure out why the field doesn't get set.
> 
> So far as trying to comprehend that code is concerned, fixing the
> formatting would probably help, as would fixing the macros at the top
> of that file so that they don't refer to local variables.
> 
> -- 
> Glynn Clements <glynn at gclements.plus.com>
> 
> _______________________________________________
> grass-dev mailing list
> grass-dev at grass.itc.it
> http://grass.itc.it/mailman/listinfo/grass-dev




More information about the grass-dev mailing list