This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: curses library in python 2.4.3 broken
Type: Stage:
Components: Library (Lib) Versions: Python 2.4
process
Status: closed Resolution: accepted
Dependencies: Superseder:
Assigned To: akuchling Nosy List: akuchling, anthonybaxter, atler_, loewis, nnorwitz, psmedley, splitscreen, vnainar
Priority: critical Keywords:

Created on 2006-04-04 08:47 by vnainar, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
panelw.diff loewis, 2006-04-15 15:30
Messages (24)
msg28038 - (view) Author: nomind (vnainar) Date: 2006-04-04 08:47
My python programs using curses  library do not work
with version 2.4.3.Even the 'ncurses.py ' demo program
in the Demo/curses directory does not work correctly.
The problem seems to be in the 'panels' library
msg28039 - (view) Author: Martin v. Löwis (loewis) * (Python committer) Date: 2006-04-04 22:16
Logged In: YES 
user_id=21627

What do you mean by "do not work"? What operating system and
what curses implementation are you using?
msg28040 - (view) Author: nomind (vnainar) Date: 2006-04-06 05:38
Logged In: YES 
user_id=1493752

Sorry my original post was incomplete. I am running
slackware 10.2 (linux kernel 2.6).The python library was
tested with ncurses 5.4 and ncurses 5.5( the latest
release). All  programs run OK with 2.4.1.As I said ,the 
curses demo that comes with the Python distributions runs OK
with 2.4.1 but 
not with 2.4.3 - I have both on my machine
msg28041 - (view) Author: Jan Palus (atler_) Date: 2006-04-09 10:06
Logged In: YES 
user_id=1497957

I confirm the problem. Every program using curses library
segfaults and there's only one error before it happens:

...
import curses # directory /usr/share/python2.4/curses
import curses # precompiled from
/usr/share/python2.4/curses/__init__.pyc
dlopen("/usr/lib/python2.4/lib-dynload/_curses.so", 2);
import _curses # dynamically loaded from
/usr/lib/python2.4/lib-dynload/_curses.so
import curses.wrapper # precompiled from
/usr/share/python2.4/curses/wrapper.pyc
import curses.panel # precompiled from
/usr/share/python2.4/curses/panel.pyc
dlopen("/usr/lib/python2.4/lib-dynload/_curses_panel.so", 2);
import _curses_panel # dynamically loaded from
/usr/lib/python2.4/lib-dynload/_curses_panel.so
Traceback (most recent call last):
  File "ncurses.py", line 273, in ?
    curses.wrapper(demo_panels)
  File "/usr/share/python2.4/curses/wrapper.py", line 49, in
wrapper
_curses.error: nocbreak() returned ERR

I'm running Linux (PLD) with Python 2.4.3 and ncurses 5.5.
With Python 2.4.2 everything worked fine.
msg28042 - (view) Author: Martin v. Löwis (loewis) * (Python committer) Date: 2006-04-09 10:29
Logged In: YES 
user_id=21627

I can't reproduce any of this on Debian;
Demo/curses/ncurses.py runs fine. Can you please
1. run ldd on _curses.so, and report the output, and
2. edit setup.py, removing the lines that deal with ncursesw,
3. atler_: produce a gdb backtrace on the time of the crash,
4: vnainar: please report what you mean by "does not work".
Does it erase your hard disk? turn off the machine? Paint
things blue instead of red?
msg28043 - (view) Author: Matt Fleming (splitscreen) Date: 2006-04-09 10:46
Logged In: YES 
user_id=1126061

Cannot reproduce on Gentoo. All the files in the Demo/curses
directory run fine.
msg28044 - (view) Author: Jan Palus (atler_) Date: 2006-04-09 10:51
Logged In: YES 
user_id=1497957

$ ldd /usr/lib/python2.4/lib-dynload/_curses.so
        libncursesw.so.5 => /usr/lib/libncursesw.so.5
(0x7004c000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x70080000)
        libc.so.6 => /lib/libc.so.6 (0x700e4000)
        libdl.so.2 => /lib/libdl.so.2 (0x70228000)
        libtinfow.so.5 => /usr/lib/libtinfow.so.5 (0x7023c000)
        /lib/ld-linux.so.2 (0x70000000)

...
Program received signal SIGSEGV, Segmentation fault.
0x7063947c in hide_panel () from /usr/lib/libpanel.so.5
gdb) bt
#0  0x7063947c in hide_panel () from /usr/lib/libpanel.so.5
#1  0x706254b8 in ?? () from
/usr/lib/python2.4/lib-dynload/_curses_panel.so
#2  0x706254b8 in ?? () from
/usr/lib/python2.4/lib-dynload/_curses_panel.so
Previous frame identical to this frame (corrupt stack?)

It seems that only programs using panel library cause
segfaults (all other demos run fine except ncurses.py),
sorry for a mistake in a last post.

loewis: I'm not sure I understand second point. What excatly
should be changed in setup.py?
msg28045 - (view) Author: Anthony Baxter (anthonybaxter) (Python triager) Date: 2006-04-09 12:14
Logged In: YES 
user_id=29957

The buildbot boxes don't show this problem.

You might need to rebuild a Python with -g and unstripped to
get a useful backtrace.
msg28046 - (view) Author: Jan Palus (atler_) Date: 2006-04-09 13:48
Logged In: YES 
user_id=1497957

More complete backtrace, I hope it will help:
http://pastebin.com/649445
msg28047 - (view) Author: Martin v. Löwis (loewis) * (Python committer) Date: 2006-04-09 20:58
Logged In: YES 
user_id=21627

atler_: around line 427, you find

            if self.compiler.find_library_file(lib_dirs,
                                                 'ncursesw'):
                readline_libs.append('ncursesw')
            elif self.compiler.find_library_file(lib_dirs,
                                                 'ncurses'):

Replace that with

            if self.compiler.find_library_file(lib_dirs,
                                                 'ncurses'):

(i.e. dropping the ncursesw part), and rebuild.
msg28048 - (view) Author: Jan Palus (atler_) Date: 2006-04-10 21:24
Logged In: YES 
user_id=1497957

loewis: removing lines refering to ncursesw solves the
problem. ncurses.py runs fine as well as other programs.

What is actual problem then? Something with ncursesw or
with python?

Anyway, Thanks for your help.
msg28049 - (view) Author: Martin v. Löwis (loewis) * (Python committer) Date: 2006-04-10 22:28
Logged In: YES 
user_id=21627

That's hard to tell. Somebody would have to debug ncurses to
find out why it crashes. Notice that it crashes only on some
installations, so it is likely rather a problem with your
ncurses installation, than with Python (or even with ncurses
itself).
msg28050 - (view) Author: nomind (vnainar) Date: 2006-04-11 05:13
Logged In: YES 
user_id=1493752

Removing 'ncursesw' (there are two references  to it in
'setup.py') seems to solve the problem. I noticed one more
oddity. Even before the above recompilation , it  ran fine
on an Xterm !
msg28051 - (view) Author: Martin v. Löwis (loewis) * (Python committer) Date: 2006-04-11 05:32
Logged In: YES 
user_id=21627

Ah, ok. vnainar, atler_: What terminal had you been using to
make it crash? What is your locale? Any other conditions
that might be relevant (e.g. dimension of the terminal)?
msg28052 - (view) Author: nomind (vnainar) Date: 2006-04-13 11:00
Logged In: YES 
user_id=1493752

Well ,  it is the linux console (in VGA mode ).
The local is en_US.The size of the console is
100X37.

msg28053 - (view) Author: Martin v. Löwis (loewis) * (Python committer) Date: 2006-04-15 07:05
Logged In: YES 
user_id=21627

I couldn't reproduce the problem on a Linux console
(although my console had a different size); so it remains
unreproducable for me.
msg28054 - (view) Author: Jan Palus (atler_) Date: 2006-04-15 14:48
Logged In: YES 
user_id=1497957

Half day of debugging and it seems that I found an answer...
just by accident ;).

When curses module is linked against ncursesw it seems that
it also should be linked against panelw not plain panel.
After changing this in setup.py, ncurses.py demo finally
runs fine.
msg28055 - (view) Author: Martin v. Löwis (loewis) * (Python committer) Date: 2006-04-15 15:30
Logged In: YES 
user_id=21627

Good spotting! Can everybody please confirm that the
attached patch fixes the problem?
msg28056 - (view) Author: Jan Palus (atler_) Date: 2006-04-17 18:50
Logged In: YES 
user_id=1497957

/me confirms
msg28057 - (view) Author: Paul Smedley (psmedley) Date: 2006-05-21 14:38
Logged In: YES 
user_id=1359962

I have a similar problem on OS/2.  When running any script
that uses curses I get:
[U:\dev\Python-2.4.3\PC\os2emx]python test_curses.py
Traceback (most recent call last):
  File "test_curses.py", line 242, in ?
    curses.wrapper(main)
  File "U:/DEV/PYTHON-2.4.3/Lib/curses/wrapper.py", line 49,
in wrapper
    curses.nocbreak()
_curses.error: nocbreak() returned ERR

If I remove the reference to nocbreak() from wrapper.py, I
get the same error but in endwin(), removing endwin() from
wrapper.py, I get an error in cbreak(), removing cbreak()
then some scripts work.

For example, from the demo folder, all work exceptlife.py &
xmas.py, which both return an error "_curses.error:
nocbreak() returned ERR" on various line numbers.

Seems certain curses functions are working correctly, others
aren't.

The patch in this bug does NOT make any difference here.
msg28058 - (view) Author: Neal Norwitz (nnorwitz) * (Python committer) Date: 2006-08-03 06:03
Logged In: YES 
user_id=33168

Andrew, could you apply this after the freeze is over?
msg28059 - (view) Author: A.M. Kuchling (akuchling) * (Python committer) Date: 2006-08-03 12:53
Logged In: YES 
user_id=11375

Sure.  
msg28060 - (view) Author: A.M. Kuchling (akuchling) * (Python committer) Date: 2006-08-06 22:12
Logged In: YES 
user_id=11375

Committed to the trunk in rev. 51134.
msg28061 - (view) Author: A.M. Kuchling (akuchling) * (Python committer) Date: 2006-08-07 00:39
Logged In: YES 
user_id=11375

Committed to 2.4 branch in rev.51136.
History
Date User Action Args
2022-04-11 14:56:16adminsetgithub: 43155
2006-04-04 08:47:30vnainarcreate