From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50320) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bw2kF-0002bz-Lh for qemu-devel@nongnu.org; Mon, 17 Oct 2016 03:54:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bw2kA-0001S8-NN for qemu-devel@nongnu.org; Mon, 17 Oct 2016 03:54:03 -0400 Sender: Paolo Bonzini References: <1476380062-18001-1-git-send-email-pbonzini@redhat.com> <1476380062-18001-3-git-send-email-pbonzini@redhat.com> <20161016100219.GB11739@stefanha-x1.localdomain> From: Paolo Bonzini Message-ID: <181a51e1-e390-f476-089f-7a7f52940606@redhat.com> Date: Mon, 17 Oct 2016 09:53:49 +0200 MIME-Version: 1.0 In-Reply-To: <20161016100219.GB11739@stefanha-x1.localdomain> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 02/18] blockjob: introduce .drain callback for jobs List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Hajnoczi Cc: kwolf@redhat.com, qemu-block@nongnu.org, famz@redhat.com, qemu-devel@nongnu.org, stefanha@redhat.com On 16/10/2016 12:02, Stefan Hajnoczi wrote: > On Thu, Oct 13, 2016 at 07:34:06PM +0200, Paolo Bonzini wrote: >> +static void backup_drain(BlockJob *job) >> +{ >> + BackupBlockJob *s = container_of(job, BackupBlockJob, common); >> + >> + /* Need to keep a reference in case blk_drain triggers execution >> + * of backup_complete... >> + */ >> + if (s->target) { >> + blk_ref(s->target); >> + blk_drain(s->target); >> + blk_unref(s->target); >> + } > [...] >> @@ -331,6 +346,7 @@ static void backup_complete(BlockJob *job, void *opaque) >> BackupCompleteData *data = opaque; >> >> blk_unref(s->target); >> + s->target = NULL; > > Will blk_unref(s->target) segfault since backup_complete() has set it to > NULL? I expected backup_drain() to stash the pointer in a local > variable to avoid using s->target. Yes, indeed. Paolo