git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] upload-pack: fix race condition in error messages

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 10, 2023, 16:14 UTC
Message-ID
<xmqqy1iig9if.fsf@gitster.g>
In-Reply-To
<pull.1572.git.1691678450757.gitgitgadget@gmail.com>
"Derrick Stolee via GitGitGadget" <gitgitgadget@gmail.com> writes:
Show 9 quoted lines
> To reduce the risk of this failure, follow this process instead:
>
> 1. Write an error message to stderr.
> 2. Write an error message across the connection.
> 3. exit(1).
>
> This reorders the events so the error is written entirely before
> the client receives a message from the remote, removing the race
> condition.

Makes sense. error() eventually goes to our own vreportf() that flushes, so by the time the call returns, our message should be already out, and the other message has no chance to be mixed with it.

Will queue.  Thanks.
Show 38 quoted lines
> Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
> ---
>     upload-pack: fix race condition in error messages
>     
>     Here is another quick patch that we've been holding in the microsoft/git
>     fork for years because it helped prevent some test flakiness, especially
>     in our more involved functional test environment.
>     
>     Thanks, -Stolee
>
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1572%2Fderrickstolee%2Fupload-pack-race-v1
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1572/derrickstolee/upload-pack-race-v1
> Pull-Request: https://github.com/gitgitgadget/git/pull/1572
>
>  upload-pack.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/upload-pack.c b/upload-pack.c
> index 94751477ab2..7b25129f0f6 100644
> --- a/upload-pack.c
> +++ b/upload-pack.c
> @@ -801,11 +801,12 @@ error:
>  	for (i = 0; i < data->want_obj.nr; i++) {
>  		struct object *o = data->want_obj.objects[i].item;
>  		if (!is_our_ref(o, data->allow_uor)) {
> +			error("git upload-pack: not our ref %s",
> +			      oid_to_hex(&o->oid));
>  			packet_writer_error(&data->writer,
>  					    "upload-pack: not our ref %s",
>  					    oid_to_hex(&o->oid));
> -			die("git upload-pack: not our ref %s",
> -			    oid_to_hex(&o->oid));
> +			exit(1);
>  		}
>  	}
>  }
>
> base-commit: a82fb66fed250e16d3010c75404503bea3f0ab61
Previous: Derrick Stolee via GitGitGadgetNext: Patrick Steinhardt
Message 2 of 12 in “upload-pack: fix race condition in error messages”
  1. upload-pack: fix race condition in error messagesDerrick Stolee via GitGitGadget, Aug 10, 2023
  2. Junio C HamanoAug 10, 2023
  3. upload-pack: fix exit code when denying fetch of unreachable object IDPatrick Steinhardt, Aug 16, 2023
  4. Junio C HamanoAug 16, 2023
  5. Junio C HamanoAug 16, 2023
  6. Jeff KingAug 17, 2023
  7. [Leftoverbits] exit code clean-up?Junio C Hamano, Aug 16, 2023
  8. Jeff KingAug 17, 2023
  9. Junio C HamanoAug 17, 2023
  10. Oswald BuddenhagenAug 17, 2023
  11. Junio C HamanoAug 17, 2023
  12. Patrick SteinhardtAug 17, 2023

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.