From: Junio C Hamano <gitster@pobox.com>
To: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Cc: git@vger.kernel.org, Michael J Gruber <git@grubix.eu>
Subject: Re: [PATCH] http.c: clear the 'finished' member once we are done with it
Date: Mon, 23 May 2022 17:02:17 -0700 [thread overview]
Message-ID: <xmqqa6b7lrw6.fsf@gitster.g> (raw)
In-Reply-To: <nycvar.QRO.7.76.6.2205240124280.352@tvgsbejvaqbjf.bet> (Johannes Schindelin's message of "Tue, 24 May 2022 01:41:02 +0200 (CEST)")
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> It calls into cURL, which I suspect has a multi-threaded mode of
> operation,
https://curl.se/libcurl/c/threadsafe.html ;-)
My understanding is that what we have is pretty much select() driven
single-threaded multi-fd transfer.
> No, I suggested to replace the `finished` variable with an attribute (or
> "field" or "member variable") of the slot, and to respect it when looking
> for an unused slot, i.e. not only look for a slot whose `in_use` is 0 but
> also require `reserved_for_use` to be 0. In essence, the
> `run_active_slot()` function owns the slot, even if it is not marked as
> `in_use`. That should address the same concern as baa7b67d but without
> using a pointer to a local variable.
Not really. An outer run_active_slot() and an inner
run_active_slot() have a pointer to the same slot object.
The inner one got hold of that object because the request the slot
used to represent for the outer run_active_slot() has finished, so
we would toggle either *(slot->finished) or the new slot->done in an
attempt to signal the completion to the outer run_active_slot() and
then make the slot not-in-use. The slot becomes in-use again with a
different request and the inner run_active_slot() is run. It first
says "this slot is not done yet---we are making a request using
it". How would the inner one say that, exactly?
In baa7b67d's fix, it is done by setting slot->finished = &finished
to its own stackframe. Because the outer run_active_slot() does not
look at slot->finished, but it looks at the finished on its
stackframe, what the inner run_active_slot() does here would not
break the outer one.
If we replace the mechanism with a separate member in the slot
structure, so that the outer run_active_slot() looks at slot->done
and the inner run_active_slot() also clears slot->done before
proceeding, then the inner one clobbers what the outer one will look
at when the recursive call that led to the inner one returns.
next prev parent reply other threads:[~2022-05-24 0:02 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-06 18:04 [PATCH 0/2] quell a few gcc warnings Michael J Gruber
2022-05-06 18:04 ` [PATCH 1/2] dir.c: avoid gcc warning Michael J Gruber
2022-05-06 20:21 ` Junio C Hamano
2022-05-09 15:58 ` Taylor Blau
2022-05-07 6:14 ` Carlo Marcelo Arenas Belón
2022-05-06 18:04 ` [PATCH 2/2] http.c: " Michael J Gruber
2022-05-06 20:22 ` Junio C Hamano
2022-05-06 21:17 ` [PATCH] http.c: clear the 'finished' member once we are done with it Junio C Hamano
2022-05-07 5:40 ` Carlo Marcelo Arenas Belón
2022-05-07 18:42 ` Junio C Hamano
2022-05-07 19:11 ` Carlo Arenas
2022-05-23 21:58 ` Johannes Schindelin
2022-05-23 22:58 ` Junio C Hamano
2022-05-23 23:36 ` Junio C Hamano
2022-05-23 23:41 ` Johannes Schindelin
2022-05-24 0:02 ` Junio C Hamano [this message]
2022-05-24 6:31 ` Daniel Stenberg
2022-05-24 10:57 ` Johannes Schindelin
2022-05-24 17:45 ` Junio C Hamano
2022-05-26 14:15 ` Daniel Stenberg
2022-05-24 11:03 ` Johannes Schindelin
2022-05-24 17:15 ` Junio C Hamano
2022-05-24 20:16 ` Carlo Marcelo Arenas Belón
2022-05-24 20:45 ` Ævar Arnfjörð Bjarmason
2022-05-24 22:34 ` Junio C Hamano
2022-05-25 9:08 ` Michael J Gruber
2022-05-25 13:27 ` Ævar Arnfjörð Bjarmason
2022-05-24 22:16 ` Junio C Hamano
2022-05-24 23:19 ` Junio C Hamano
2022-05-25 2:02 ` Carlo Arenas
2022-05-24 20:38 ` Ævar Arnfjörð Bjarmason
2022-05-24 22:28 ` Junio C Hamano
2022-05-25 10:07 ` Johannes Schindelin
2022-05-25 16:40 ` Junio C Hamano
2022-05-06 20:41 ` [PATCH 2/2] http.c: avoid gcc warning Carlo Marcelo Arenas Belón
2022-05-09 11:22 ` [PATCH] detect-compiler: make detection independent of locale Michael J Gruber
2022-05-09 15:52 ` Junio C Hamano
2022-05-09 15:59 ` rsbecker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqa6b7lrw6.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@grubix.eu \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).