NetBSD Problem Report #26660

Received: (qmail 27092 invoked by uid 605); 14 Aug 2004 15:08:05 -0000
Message-Id: <200408141450.i7EEopHZ003693@snowdrop.l8s.co.uk>
Date: Sat, 14 Aug 2004 15:50:51 +0100 (BST)
From: dsl@netbsd.org
Sender: gnats-bugs-owner@NetBSD.org
Reply-To: dsl@netbsd.org
To: gnats-bugs@gnats.netbsd.org
Subject: libcurses 'curscr' contains the wrong information
X-Send-Pr-Version: 3.95

>Number:         26660
>Category:       lib
>Synopsis:       libcurses 'curscr' contains the wrong information
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    lib-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Aug 14 15:09:01 +0000 2004
>Closed-Date:    
>Last-Modified:  Sat Jul 23 23:50:01 +0000 2005
>Originator:     David Laight
>Release:        NetBSD 2.0 current
>Organization:
>Environment:
	current sources
Architecture: i386
Machine: i386
>Description:
	Other curses implementations use 'curscr' for the screen image
	that has been processed by wnoutrefresh(). NetBSD's curses
	uses the internal structure __virtscr for that and uses 'curscr'
	for the image processed bu doupdate() - ie the data that is actually
	on the screen display.

	wrefresh(stdscr) is also expected to re-output the entire screen
	(eg if it has been corrupted by non-curses output).
>How-To-Repeat:
	Run code that uses the (almost) portable code below to perform
	a 'pop up box' without corrupting the underlying screen, and without
	knowing which WINDOWs need to be refreshed in which order to redraw
	the screen image.

	This code:
		popup_win = newwin( ... );
		sv_win = dupwin(popup_win);
		overwrite(stdscr, sv_win);
		.... do display in popup_win ...
		overwrite(sv_win, popup_win);
		wnoutrefresh(sv_win);
		delwin(sv_win);
		del_win(popup_win);
	only works if preceded by a doupdate() call.
>Fix:
	Completely redo all the refresh handling...
>Release-Note:
>Audit-Trail:

From: David Laight <dsl@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:  
Subject: pr/26660 CVS commit: src/usr.bin/menuc
Date: Sat, 14 Aug 2004 15:51:08 +0000 (UTC)

 Module Name:	src
 Committed By:	dsl
 Date:		Sat Aug 14 15:51:08 UTC 2004

 Modified Files:
 	src/usr.bin/menuc: menu_sys.def

 Log Message:
 Call doupdate() before copying out of stdscr (avoids PR 26660)
 Delete a diagnostic variable.


 To generate a diff of this commit:
 cvs rdiff -r1.54 -r1.55 src/usr.bin/menuc/menu_sys.def

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.


From: Julian Coleman <jdc@coris.org.uk>
To: dsl@netbsd.org
Cc: gnats-bugs@gnats.netbsd.org
Subject: Re: lib/26660: libcurses 'curscr' contains the wrong information
Date: Fri, 3 Sep 2004 15:05:23 +0100

 > 	Other curses implementations use 'curscr' for the screen image
 > 	that has been processed by wnoutrefresh(). NetBSD's curses
 > 	uses the internal structure __virtscr for that and uses 'curscr'
 > 	for the image processed bu doupdate() - ie the data that is actually
 > 	on the screen display.

 When I implemented this, I couldn't find a definitive source for what
 `curscr' represented.  I took it to be the contents of the terminal - that is
 the display as processed by doupdate() or wrefresh().  If this isn't the
 case, then we can remove `__virtscr' completely and push the updates directly
 to `curscr'.  That should also speed things up (avoiding the double copy).
 One side affect will be that the sequence:

   wnoutrefresh(win)
   wrefresh(curscr)

 won't repaint the terminal as it was before, but will also add the changes
 in `win'.

 > 	wrefresh(stdscr) is also expected to re-output the entire screen
 > 	(eg if it has been corrupted by non-curses output).

 I thought this was the job of wrefesh(curscr), as wrefresh(stdscr), i.e.
 refresh() will only write changes.

 > >Fix:
 > 	Completely redo all the refresh handling...

 That's probably a reasonable idea anyway.  The code in quickch() at least
 needs looking at.

 J

 -- 
   My other computer also runs NetBSD    /        Sailing at Newbiggin
         http://www.netbsd.org/        /   http://www.newbigginsailingclub.org/
From: Soren Jacobsen <snj@netbsd.org>
To: gnats-bugs@netbsd.org
Cc: 
Subject: PR/26660 CVS commit: [netbsd-2] src/usr.bin/menuc
Date: Sat, 23 Jul 2005 23:49:37 +0000 (UTC)

 Module Name:	src
 Committed By:	snj
 Date:		Sat Jul 23 23:49:37 UTC 2005

 Modified Files:
 	src/usr.bin/menuc [netbsd-2]: menu_sys.def

 Log Message:
 Pull up revision 1.55 (requested by riz in ticket #5515):
 Call doupdate() before copying out of stdscr (avoids PR 26660)
 Delete a diagnostic variable.


 To generate a diff of this commit:
 cvs rdiff -r1.53.4.1 -r1.53.4.2 src/usr.bin/menuc/menu_sys.def

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

>Unformatted:

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2007 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.