[vtkusers] Old Linux:vtkRenderWidgetConeExample() SIGSEGV

Donna Hanlon donna at v1.wustl.edu
Mon Nov 25 13:56:49 EST 2002


Prabhu Ramachandran wrote:
> Not sure if this will help but make sure that the version of Tcl/Tk
> that Python's _tkinter.so links to is exactly the same as the one used
> to compile VTK with.  If there is a mismatch in these one can run into
> segfaults etc.

They are the same version.

> Besides, I'm sure upgrading from 6.1 to 7.x is a good idea anyway. :)

The only reason we haven't upgraded this host is so we can build on it
and have our applications run on older platforms.  When we build on our
Red Hat 7.1 host, many of our users have runtime problems (e.g., they
don't have required GLIBC version).  What we build on our older Linux
host seems to give users fewer runtime problems.  Perhaps there is an
easier way around that problem.

To correct something I said earlier:  The well-behaved platforms *are*
invoking Tk_ConfigureWidget from tkOldConfig.c.  The problem seems to be
that on my old Linux box, Tk_ConfigureWidget doesn't recognize the
TK_CONFIG_END provided by vtkTkRenderWidget.cxx:  

static Tk_ConfigSpec vtkTkRenderWidgetConfigSpecs[] = {
    {TK_CONFIG_PIXELS, (char *) "-height", (char *) "height", (char *)
"Height",
     (char *) "400", Tk_Offset(struct vtkTkRenderWidget, Height), 0,
NULL},
  
    {TK_CONFIG_PIXELS, (char *) "-width", (char *) "width", (char *)
"Width",
     (char *) "400", Tk_Offset(struct vtkTkRenderWidget, Width), 0,
NULL},
  
    {TK_CONFIG_STRING, (char *) "-rw", (char *) "rw", (char *) "RW",
     (char *) "", Tk_Offset(struct vtkTkRenderWidget, RW), 0, NULL},

    {TK_CONFIG_END, (char *) NULL, (char *) NULL, (char *) NULL,
     (char *) NULL, 0, 0, NULL}
};

For whatever reason, this loop gets to an iteration 14 before crashing:

    for (specPtr = specs; specPtr->type != TK_CONFIG_END; specPtr++) {

The well-behaved ones exit after iteration 3, because then specPtr->type
== TK_CONFIG_END. On the old Linux box, this if fails to evaluate as
true for the fourth Tk_ConfigSpec:

	if (specPtr->type == TK_CONFIG_END) printf("TK_CONFIG_END\n");

Odd.



More information about the vtkusers mailing list