Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 18 Sep 2011 18:11:23 +0800
From:      Adrian Chadd <adrian@freebsd.org>
To:        Alexander Zagrebin <alexz@visp.ru>
Cc:        freebsd-current <freebsd-current@freebsd.org>, lehmann@ans-netz.de
Subject:   Re: cvsup broken on amd64?
Message-ID:  <CAJ-VmonzwUVEHgzOU1QAY7hGKwLn6Dx2RxTaE4bEn0m4eoee3w@mail.gmail.com>
In-Reply-To: <EA16DA2E96DD411C8C8A7EC81E034162@vosz.local>
References:  <20110908221356.Horde.MFEsZ6Qd9PdOaSIEaid2X_A@avocado.salatschuessel.net> <4E692F87.5010708@sentex.net> <20110909073305.Horde.oi-EGaQd9PdOaaURAsTRVJk@avocado.salatschuessel.net> <4E6A076D.7040309@wintek.com> <EA16DA2E96DD411C8C8A7EC81E034162@vosz.local>

next in thread | previous in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-VmonzwUVEHgzOU1QAY7hGKwLn6Dx2RxTaE4bEn0m4eoee3w>