From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13619 invoked by alias); 5 Jan 2004 19:06:40 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 13608 invoked from network); 5 Jan 2004 19:06:39 -0000 Received: from unknown (HELO nevyn.them.org) (66.93.172.17) by sources.redhat.com with SMTP; 5 Jan 2004 19:06:39 -0000 Received: from drow by nevyn.them.org with local (Exim 4.30 #1 (Debian)) id 1Ada3i-0007bi-HT; Mon, 05 Jan 2004 14:06:38 -0500 Date: Mon, 05 Jan 2004 19:06:00 -0000 From: Daniel Jacobowitz To: "J. Johnston" Cc: Andrew Cagney , gdb-patches@sources.redhat.com Subject: Re: [RFA]: Fix do_cleanups if oldchain is NULL Message-ID: <20040105190638.GA29179@nevyn.them.org> Mail-Followup-To: "J. Johnston" , Andrew Cagney , gdb-patches@sources.redhat.com References: <3FE0C502.7020408@redhat.com> <3FF59719.7020908@gnu.org> <3FF9B429.6080501@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <3FF9B429.6080501@redhat.com> User-Agent: Mutt/1.5.1i X-SW-Source: 2004-01/txt/msg00097.txt.bz2 On Mon, Jan 05, 2004 at 01:59:53PM -0500, J. Johnston wrote: > > > Andrew Cagney wrote: > >>I recently solved a bug on the ia64 concerning cleanups. What was > >>happening was that a cleanup list was being re-initialized to NULL > >>inside a loop and later do_cleanups() was called. This caused the > >>entire cleanup list to be run because the design is to run the list > >>until the passed in cleanup is reached. This caused other errors when > >>the stream being used was deleted, etc... > >> > >>This patch adds a check to do_my_cleanups() so no cleanups will be > >>performed if the passed in chain is NULL. > >> > >>Ok to commit? > > > > > >(hmm, no one thought to review this while I was on hols :-() > >I think the bug is in the calling code, and not utils.c. That patch > >unfortunatly makes a fundamental change to the core of the cleanup code > >and there's no easy way of demonstrating that other callers aren't > >assuming that NULL implies do all cleanups. > > > >Andrew > > > > Perhaps, but there is no way to properly initialize a cleanup to avoid > compiler warnings. Sure there is: struct cleanup *old_chain = make_cleanup (null_cleanup, 0); > If you set it to NULL which is the obvious choice, this > currently means run all cleanups. IMHO, this is the wrong choice for the > default. I found no cases where NULL was passed in directly. Do you see a > case where a gdb routine has the right to run all previous cleanups except > in an exit scenario? This function is not just used for do_cleanups, but also for do_run_cleanups et cetera. -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer