From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20854 invoked by alias); 21 Mar 2008 20:45:36 -0000 Received: (qmail 20842 invoked by uid 22791); 21 Mar 2008 20:45:35 -0000 X-Spam-Check-By: sourceware.org Received: from host0.dyn.jankratochvil.net (HELO host0.dyn.jankratochvil.net) (89.250.240.59) by sourceware.org (qpsmtpd/0.31) with ESMTP; Fri, 21 Mar 2008 20:45:17 +0000 Received: from host0.dyn.jankratochvil.net (localhost [127.0.0.1]) by host0.dyn.jankratochvil.net (8.14.2/8.14.1) with ESMTP id m2LKj6IC006235; Fri, 21 Mar 2008 21:45:06 +0100 Received: (from jkratoch@localhost) by host0.dyn.jankratochvil.net (8.14.2/8.14.2/Submit) id m2LKj6a8006234; Fri, 21 Mar 2008 21:45:06 +0100 Date: Fri, 21 Mar 2008 20:45:00 -0000 From: Jan Kratochvil To: gdb-patches@sourceware.org Cc: Daniel Jacobowitz , Chet Ramey Subject: Re: [patch] Fix testsuite annotate-quit race (PR 544) Message-ID: <20080321204506.GA5033@host0.dyn.jankratochvil.net> References: <20080318225436.GA27374@host0.dyn.jankratochvil.net> <20080318231738.GA22432@caradoc.them.org> <20080319081056.GA32510@host0.dyn.jankratochvil.net> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="mYCpIKhGyMATD0i+" Content-Disposition: inline In-Reply-To: <20080319081056.GA32510@host0.dyn.jankratochvil.net> User-Agent: Mutt/1.5.17 (2007-11-01) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-03/txt/msg00317.txt.bz2 --mYCpIKhGyMATD0i+ Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 1189 On Wed, 19 Mar 2008 09:10:56 +0100, Jan Kratochvil wrote: > On Wed, 19 Mar 2008 00:17:38 +0100, Daniel Jacobowitz wrote: > > On Tue, Mar 18, 2008 at 11:54:36PM +0100, Jan Kratochvil wrote: > > > Hi, > > > > > > PR 544 des gdb.cp/annota2.exp and gdb.cp/annota3.exp sometimes FAIL with: > > > FAIL: gdb.cp/annota3.exp: annotate-quit (pattern 1) > ... > > Isn't this a bug in GDB, not a bug in the test? > > You are right it is probably better to fix it in readline. The patch was approved by the readline maintainer: On Fri, 21 Mar 2008 19:37:31 +0100, Chet Ramey wrote: > I will add something like your block_sigint/release_sigint changes around > the guts of rl_redisplay. That's the right thing to do anyway. It will > probably not come out as a patch for readline-5.2; you can use your > current patch (though the names will change to _rl_block_sigint and > _rl_release_sigint -- fair warning). It could be probably also coded only in GDB by modifying the function pointer RL_REDISPLAY_FUNCTION instead to a custom wrapper calling RL_REDISPLAY but it would need the SIGINT blocking/handling done in GDB. OK to commit as a readline fork before readline-6 is here? Regards, Jan --mYCpIKhGyMATD0i+ Content-Type: text/plain; charset=us-ascii Content-Disposition: inline; filename="readline-display-blockint-v2.patch" Content-length: 2043 2008-03-21 Jan Kratochvil PR gdb/544 * display.c (rl_redisplay): Wrap the function by the calls to BLOCK_SIGINT and RELEASE_SIGINT. * rltty.c (block_sigint, release_sigint): Make the functions global. * rltty.h (block_sigint, release_sigint): New prototypes. --- ./readline/display.c 5 May 2006 18:26:12 -0000 1.11 +++ ./readline/display.c 19 Mar 2008 05:10:16 -0000 @@ -463,6 +463,10 @@ rl_redisplay () if (!readline_echoing_p) return; + /* Signals are blocked through this function as the global data structures + could get corrupted upon modifications from an invoked signal handler. */ + block_sigint (); + if (!rl_display_prompt) rl_display_prompt = ""; @@ -1139,6 +1143,8 @@ rl_redisplay () else visible_wrap_offset = wrap_offset; } + + release_sigint (); } /* PWP: update_line() is based on finding the middle difference of each --- ./readline/rltty.c 5 May 2006 18:26:12 -0000 1.9 +++ ./readline/rltty.c 19 Mar 2008 05:10:16 -0000 @@ -52,8 +52,8 @@ extern int errno; rl_vintfunc_t *rl_prep_term_function = rl_prep_terminal; rl_voidfunc_t *rl_deprep_term_function = rl_deprep_terminal; -static void block_sigint PARAMS((void)); -static void release_sigint PARAMS((void)); +void block_sigint PARAMS((void)); +void release_sigint PARAMS((void)); static void set_winsize PARAMS((int)); @@ -75,7 +75,7 @@ static int sigint_blocked; /* Cause SIGINT to not be delivered until the corresponding call to release_sigint(). */ -static void +void block_sigint () { if (sigint_blocked) @@ -100,7 +100,7 @@ block_sigint () } /* Allow SIGINT to be delivered. */ -static void +void release_sigint () { if (sigint_blocked == 0) --- ./readline/rltty.h 5 May 2006 18:26:12 -0000 1.5 +++ ./readline/rltty.h 19 Mar 2008 05:10:16 -0000 @@ -79,4 +79,7 @@ typedef struct _rl_tty_chars { unsigned char t_status; } _RL_TTY_CHARS; +extern void block_sigint PARAMS((void)); +extern void release_sigint PARAMS((void)); + #endif /* _RLTTY_H_ */ --mYCpIKhGyMATD0i+--