From owner-freebsd-current@FreeBSD.ORG Sun Sep 18 10:11:24 2011 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5EDE2106566B for ; Sun, 18 Sep 2011 10:11:24 +0000 (UTC) (envelope-from adrian.chadd@gmail.com) Received: from mail-yx0-f182.google.com (mail-yx0-f182.google.com [209.85.213.182]) by mx1.freebsd.org (Postfix) with ESMTP id 1BA108FC0C for ; Sun, 18 Sep 2011 10:11:23 +0000 (UTC) Received: by yxk36 with SMTP id 36so4488480yxk.13 for ; Sun, 18 Sep 2011 03:11:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; bh=d/ynQLfqkeR3OsKkT3HyKiyhd7wAfNbcX4F1MqD2VH0=; b=eaM13FC7p2AF6+hVP6r0ZPY7gqMh4t/8CYqTGGNx8KcQHGHSmW3OzeEJPSO97dBUMd 9LJ4OIyVWrHGHQfEDlZ+1X65BzUXMFsGO9VY8YgHWUguj4kZDFQ/C1z4RhVLqJYf9PnD wPXzYOzEmWWei1PnuBqTLXuBjftAazer1UBfo= MIME-Version: 1.0 Received: by 10.236.185.195 with SMTP id u43mr7057484yhm.106.1316340683338; Sun, 18 Sep 2011 03:11:23 -0700 (PDT) Sender: adrian.chadd@gmail.com Received: by 10.236.111.42 with HTTP; Sun, 18 Sep 2011 03:11:23 -0700 (PDT) In-Reply-To: References: <20110908221356.Horde.MFEsZ6Qd9PdOaSIEaid2X_A@avocado.salatschuessel.net> <4E692F87.5010708@sentex.net> <20110909073305.Horde.oi-EGaQd9PdOaaURAsTRVJk@avocado.salatschuessel.net> <4E6A076D.7040309@wintek.com> Date: Sun, 18 Sep 2011 18:11:23 +0800 X-Google-Sender-Auth: ffVqWNs15DzU_F86y7yghpdp9e4 Message-ID: From: Adrian Chadd To: Alexander Zagrebin Content-Type: text/plain; charset=ISO-8859-1 Cc: freebsd-current , lehmann@ans-netz.de Subject: Re: cvsup broken on amd64? X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 18 Sep 2011 10:11:24 -0000 Hi, So I've taken a look at the csup source. The problem here is the updater thread setting the "closed" state (fixups_closed()) before calling updater_batch() again to handle fixups. Checking for size != 0 at that point may not be valid at the list size may actually be 0 for a short period of time. What about this patch: Index: updater.c =================================================================== --- updater.c (revision 224905) +++ updater.c (working copy) @@ -240,9 +240,9 @@ * Make sure to close the fixups even in case of an error, * so that the lister thread doesn't block indefinitely. */ - fixups_close(up->config->fixups); if (!error) error = updater_batch(up, 1); + fixups_close(up->config->fixups); switch (error) { case UPDATER_ERR_PROTO: xasprintf(&args->errmsg, "Updater failed: Protocol error"); Oliver, would you please try that? Thanks, Adrian