[Python-Dev] FreeBSD test suite failure -> curses

"Martin v. Löwis" martin at v.loewis.de
Sun Mar 9 20:23:18 CET 2008


> One result I get is this:
> 
> Program received signal SIGSEGV, Segmentation fault.
> [Switching to Thread 0x8173000 (LWP 100121)]
> 0x28ac4102 in PyCurses_getsyx (self=0x0)
>     at /usr/home/asmodai/projects/python/Modules/_cursesmodule.c:1770
> 1770      getsyx(y, x);
> 
> Is a value of 0x0 valid for self? I'd figure it would be a memory address,
> but I do not know the internals well enough for that.

That's fine. It's a module-level function; self is typically NULL for
these.

Another issue is that there should be an additional (ignored) parameter
args in PyCurses_getsyx; you might try adding one.

However, the real culprit should be getsyx(). What does this entire
function expand to when run through a preprocessor, and where does
it crash when you run the expanded code in the debugger?

For reference, on Linux (ncurses) it expands to

   do {
     if (((newscr)->_leaveok))
       (y) = (x) = -1;
     else
       ((y) = ((newscr) ? (newscr)->_cury : (-1)),
        (x) = ((newscr) ? (newscr)->_curx : (-1))); }
   while(0);

which should be equivalent to

   if (newscr->_leaveok)
     y = x = -1;
   else  {
     y = newscr ? newscr->_cury : -1;
     x = newscr ? newscr->_curx : -1;
   }

If it's similar on FreeBSD, the only reason why this
could break is that newscr is NULL.

Regards,
Martin
	


More information about the Python-Dev mailing list