All of lore.kernel.org
 help / color / mirror / Atom feed
From: Johannes Sixt <j6t@kdbg.org>
To: Stefan Beller <sbeller@google.com>, gitster@pobox.com
Cc: git@vger.kernel.org, Jens.Lehmann@web.de, peff@peff.net,
	sunshine@sunshineco.com, jrnieder@gmail.com
Subject: Re: [PATCHv19 00/11] Expose submodule parallelism to the user
Date: Mon, 29 Feb 2016 21:48:10 +0100	[thread overview]
Message-ID: <56D4AE8A.2050403@kdbg.org> (raw)
In-Reply-To: <1456444119-6934-1-git-send-email-sbeller@google.com>

Hi folks,

we have a major breakage in the parallel tasks infrastructure, and I'm
afraid it is already in master.

Instrument the code in sb/submodule-parallel-update like this and enjoy
the fireworks of './t7400-submodule-basic.sh -v -i -x --debug':

diff --git a/git-submodule.sh b/git-submodule.sh
index 0322282..482c7f6 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -690,8 +690,9 @@ cmd_update()
 		cmd_init "--" "$@" || return
 	fi
 
+	set -x
 	{
-	git submodule--helper update-clone ${GIT_QUIET:+--quiet} \
+	valgrind git submodule--helper update-clone ${GIT_QUIET:+--quiet} \
 		${wt_prefix:+--prefix "$wt_prefix"} \
 		${prefix:+--recursive-prefix "$prefix"} \
 		${update:+--update "$update"} \
diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
index 5572327..717e491 100755
--- a/t/t7400-submodule-basic.sh
+++ b/t/t7400-submodule-basic.sh
@@ -337,6 +337,7 @@ test_expect_success 'update should fail when path is used by a file' '
 
 	echo "hello" >init &&
 	test_must_fail git submodule update &&
+	false &&
 
 	test_cmp expect init
 '

The culprit seems to be default_task_finished(), which accesses argv[]
of the struct child_process after finish_command has released it,
provided the child exited with an error, for example:

==3395== Invalid read of size 8
==3395==    at 0x54F991: default_task_finished (run-command.c:932)
==3395==    by 0x49158F: update_clone_task_finished (submodule--helper.c:421)
==3395==    by 0x5504A2: pp_collect_finished (run-command.c:1122)
==3395==    by 0x5507C7: run_processes_parallel (run-command.c:1194)
==3395==    by 0x4918EB: update_clone (submodule--helper.c:483)
==3395==    by 0x4919D8: cmd_submodule__helper (submodule--helper.c:527)
==3395==    by 0x405CBE: run_builtin (git.c:353)
==3395==    by 0x405EAA: handle_builtin (git.c:540)
==3395==    by 0x405FCC: run_argv (git.c:594)
==3395==    by 0x4061BF: main (git.c:701)
==3395==  Address 0x5e49370 is 0 bytes inside a block of size 192 free'd
==3395==    at 0x4C2A37C: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==3395==    by 0x4A26EE: argv_array_clear (argv-array.c:73)
==3395==    by 0x54DFC4: child_process_clear (run-command.c:18)
==3395==    by 0x54EFA7: finish_command (run-command.c:539)
==3395==    by 0x550413: pp_collect_finished (run-command.c:1120)
==3395==    by 0x5507C7: run_processes_parallel (run-command.c:1194)
==3395==    by 0x4918EB: update_clone (submodule--helper.c:483)
==3395==    by 0x4919D8: cmd_submodule__helper (submodule--helper.c:527)
==3395==    by 0x405CBE: run_builtin (git.c:353)
==3395==    by 0x405EAA: handle_builtin (git.c:540)
==3395==    by 0x405FCC: run_argv (git.c:594)
==3395==    by 0x4061BF: main (git.c:701)

I haven't thought about a solution, yet. Perhaps you have ideas.

-- Hannes

  parent reply	other threads:[~2016-02-29 20:48 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-25  3:06 [PATCHv17 00/11] Expose submodule parallelism to the user Stefan Beller
2016-02-25  3:06 ` [PATCHv17 01/11] submodule-config: keep update strategy around Stefan Beller
2016-02-25 18:06   ` Junio C Hamano
2016-02-25 18:21     ` Stefan Beller
2016-02-25  3:06 ` [PATCHv17 02/11] submodule-config: drop check against NULL Stefan Beller
2016-02-25  3:06 ` [PATCHv17 03/11] fetching submodules: respect `submodule.fetchJobs` config option Stefan Beller
2016-02-25  3:06 ` [PATCHv17 04/11] submodule update: direct error message to stderr Stefan Beller
2016-02-25  3:06 ` [PATCHv17 05/11] run_processes_parallel: treat output of children as byte array Stefan Beller
2016-02-25 18:16   ` Junio C Hamano
2016-02-25 20:35     ` Stefan Beller
2016-02-25  3:06 ` [PATCHv17 06/11] run-command: expose default_{start_failure, task_finished} Stefan Beller
2016-02-25  3:06 ` [PATCHv17 07/11] run_processes_parallel: rename parameters for the callbacks Stefan Beller
2016-02-25  3:06 ` [PATCHv17 08/11] run_processes_parallel: correctly terminate callbacks with an LF Stefan Beller
2016-02-25  3:06 ` [PATCHv17 09/11] git submodule update: have a dedicated helper for cloning Stefan Beller
2016-02-25  3:06 ` [PATCHv17 10/11] submodule update: expose parallelism to the user Stefan Beller
2016-02-25  3:06 ` [PATCHv17 11/11] clone: allow an explicit argument for parallel submodule clones Stefan Beller
2016-02-25 22:26 ` [PATCHv17 00/11] Expose submodule parallelism to the user Junio C Hamano
2016-02-25 23:08   ` [PATCHv18 00/11] Expose Stefan Beller
2016-02-25 23:08     ` [PATCHv18 01/11] submodule-config: keep update strategy around Stefan Beller
2016-02-25 23:08     ` [PATCHv18 02/11] submodule-config: drop check against NULL Stefan Beller
2016-02-25 23:08     ` [PATCHv18 03/11] fetching submodules: respect `submodule.fetchJobs` config option Stefan Beller
2016-02-25 23:08     ` [PATCHv18 04/11] submodule update: direct error message to stderr Stefan Beller
2016-02-25 23:08     ` [PATCHv18 05/11] run_processes_parallel: treat output of children as byte array Stefan Beller
2016-02-25 23:08     ` [PATCHv18 06/11] run-command: expose default_{start_failure, task_finished} Stefan Beller
2016-02-25 23:08     ` [PATCHv18 07/11] run_processes_parallel: rename parameters for the callbacks Stefan Beller
2016-02-25 23:08     ` [PATCHv18 08/11] run_processes_parallel: correctly terminate callbacks with an LF Stefan Beller
2016-02-25 23:08     ` [PATCHv18 09/11] git submodule update: have a dedicated helper for cloning Stefan Beller
2016-02-25 23:08     ` [PATCHv18 10/11] submodule update: expose parallelism to the user Stefan Beller
2016-02-25 23:08     ` [PATCHv18 11/11] clone: allow an explicit argument for parallel submodule clones Stefan Beller
2016-02-25 23:11     ` [PATCHv18 00/11] Expose Stefan Beller
2016-02-25 23:19     ` Jonathan Nieder
2016-02-25 23:25       ` Stefan Beller
2016-02-25 23:35         ` Jonathan Nieder
2016-02-25 23:39           ` Junio C Hamano
2016-02-25 23:48             ` [PATCHv19 00/11] Expose submodule parallelism to the user Stefan Beller
2016-02-25 23:48               ` [PATCHv19 01/11] submodule-config: keep update strategy around Stefan Beller
2016-02-25 23:48               ` [PATCHv19 02/11] submodule-config: drop check against NULL Stefan Beller
2016-02-25 23:48               ` [PATCHv19 03/11] fetching submodules: respect `submodule.fetchJobs` config option Stefan Beller
2016-02-25 23:48               ` [PATCHv19 04/11] submodule update: direct error message to stderr Stefan Beller
2016-02-25 23:48               ` [PATCHv19 05/11] run_processes_parallel: treat output of children as byte array Stefan Beller
2016-02-25 23:48               ` [PATCHv19 06/11] run-command: expose default_{start_failure, task_finished} Stefan Beller
2016-02-25 23:48               ` [PATCHv19 07/11] run_processes_parallel: rename parameters for the callbacks Stefan Beller
2016-02-25 23:48               ` [PATCHv19 08/11] run_processes_parallel: correctly terminate callbacks with an LF Stefan Beller
2016-02-25 23:48               ` [PATCHv19 09/11] git submodule update: have a dedicated helper for cloning Stefan Beller
2016-02-27  8:40                 ` Duy Nguyen
2016-02-29 19:03                   ` Stefan Beller
2016-02-25 23:48               ` [PATCHv19 10/11] submodule update: expose parallelism to the user Stefan Beller
2016-02-25 23:48               ` [PATCHv19 11/11] clone: allow an explicit argument for parallel submodule clones Stefan Beller
2016-02-25 23:50               ` [PATCHv19 00/11] Expose submodule parallelism to the user Jonathan Nieder
2016-02-29 20:48               ` Johannes Sixt [this message]
2016-02-29 20:59                 ` Stefan Beller
2016-02-29 21:01                 ` Junio C Hamano
2016-02-29 21:06                   ` Stefan Beller
2016-02-29 21:19                     ` Junio C Hamano
2016-02-29 21:22                       ` Stefan Beller
2016-02-29 21:28                       ` Johannes Sixt
2016-02-29 21:51                         ` Junio C Hamano
2016-02-29 21:55                           ` Stefan Beller
2016-02-25 23:25     ` [PATCHv18 00/11] Expose Jonathan Nieder

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

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56D4AE8A.2050403@kdbg.org \
    --to=j6t@kdbg.org \
    --cc=Jens.Lehmann@web.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jrnieder@gmail.com \
    --cc=peff@peff.net \
    --cc=sbeller@google.com \
    --cc=sunshine@sunshineco.com \
    /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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.