From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37975) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z5EKS-0005uQ-4Q for qemu-devel@nongnu.org; Wed, 17 Jun 2015 10:28:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Z5EKM-0005Wq-0c for qemu-devel@nongnu.org; Wed, 17 Jun 2015 10:28:36 -0400 Received: from mx1.redhat.com ([209.132.183.28]:59518) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z5EKL-0005Wb-SY for qemu-devel@nongnu.org; Wed, 17 Jun 2015 10:28:29 -0400 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id 92B6EC465E for ; Wed, 17 Jun 2015 14:28:29 +0000 (UTC) Date: Wed, 17 Jun 2015 16:28:25 +0200 From: "Michael S. Tsirkin" Message-ID: <20150617162752-mutt-send-email-mst@redhat.com> References: <1434458200-23440-1-git-send-email-mst@redhat.com> <55818392.60204@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <55818392.60204@redhat.com> Subject: Re: [Qemu-devel] [PATCH RFC 0/3] error: allow local errors to trigger abort List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: John Snow Cc: kwolf@redhat.com, qemu-devel@nongnu.org, dgilbert@redhat.com, armbru@redhat.com On Wed, Jun 17, 2015 at 10:26:26AM -0400, John Snow wrote: > > > On 06/16/2015 08:53 AM, Michael S. Tsirkin wrote: > > > > It's a common idiom: > > > > Error *local_err = NULL; > > .... > > foo(&local_err); > > ... > > if (local_err) { > > error_propagate(errp, local_err); > > return; > > } > > > > Unfortunately it means that call to foo(&local_err) will > > not abort even if errp is set to error_abort. > > > > Instead, we get an abort at error_propagate which is too late. > > > > Please humor the ignorant: Why is this too late? Any code that does > anything between foo(&local_err) and error_propagate is already broken. We have lost the stack so it's hard to debug. v2 explains it better. > > To fix, add an API to check errp and set local_err to error_abort > > if errp is error_abort. > > > > Michael S. Tsirkin (3): > > error: don't rely on pointer comparisons > > error: allow local errors to trigger abort > > block/nfs: switch to error_init_local > > > > include/qapi/error.h | 5 +++++ > > block/nfs.c | 2 +- > > util/error.c | 21 ++++++++++++++++----- > > 3 files changed, 22 insertions(+), 6 deletions(-) > >