Subject: Re: Problems with Windows, Was: What's cooking in git.git (May 2013, #01; Fri, 3)

From: Torsten Bögershausen <[email-masked]>
Date: Tue, 14 May 2013 21:37:34 +0200

On 2013-05-09 19.18, Ramsay Jones wrote:
> Torsten Bögershausen wrote:
>> On 2013-05-04 01.14, Junio C Hamano wrote:
>>>
>>>  Cygwin portability; both were reviewed by Jonathan, and the tip one
>>>  seems to want a bit further explanation.  Needs positive report
>>>  from Cygwin 1.7 users who have been on 1.7 to make sure it does not
>>>  regress for them.
>>
>> I was trying to verify that cygwin 1.7 is still Ok, but got puzzled.
>>
>> Running the test suite under cygwin doesn't seem to work any more (?):
>>
>> Scenario 1:
>> The PC is running alone, and goes into the screen saver.
>> Pressing CTRL-ALT-DEL didn't get any effect.
>>
>> Scenario 2:
>> The PC didn't react any more, when the test suite was run in background.
>> In 3 or 4 cases the PC needed to be reboot hardly.
>>
>> Using the commits before and after this change makes the test suite hang 
>> as well at some point, then it hangs somewhere at TC 3000--4000.
>>
>> Scenario 4:
>> The I disabled the screensaver, upgdated cygwin,
>>  and went back to an older commit:
>> The latest run from commit 52d63e70, April 28,
>> hangs in TC 5500, ok 26 clone shallow object count.
>>
>> I can see 2 times 
>> git.exe pull --depth 4 ..A 
>>
>> Scenario 5:
>> The run of today 1.8.3-rc1, hangs in t5510,
>> some git.exe are running fetch. (or pull)
>>
>>
>> It seems as if some process/exes are not terminated
>> in the way it should be.
>>
>> I will try on a different machine,
>> comments are wellcome
> 
> Hmm, I'm a little puzzled, but not shocked. ;-)
> 
> Somebody, I forget who, had already tested Jonathan's patch
> on cygwin 1.7 successfully and my follow up patch should be
> a no-op on cygwin 1.7; so I'm puzzled! (The high risk should
> have been on cygwin 1.5).
> 
> I'm not shocked because running the test-suite on cygwin has
> been a bit of a magical mystery tour for quite some time.
> 
> In about 2007, I could not run the test-suite for about six
> to nine months; it would randomly wedge my laptop solid - I had
> to pull the power-cord out in order to re-boot. (I suspect that
> commit 9cb18f56fde may have cured that particular problem, but
> don't quote me on that - I didn't investigate at the time.)
> 
> I have noticed that running the tests with 'prove' is more likely
> to prove successful, so my config.mak looks like:
> 
>     $ cat config.mak
>     NO_SVN_TESTS=1
>     GIT_TEST_OPTS=--no-color
>     NO_GETTEXT=1
>     DEFAULT_TEST_TARGET=prove
>     GIT_PROVE_OPTS='--timer'
>     $
> 
> I currently run the tests like so:
> 
>     $ time $(GIT_SKIP_TESTS='t0061.3 t0070.3 t4130 t9010 t9300' make test \
>     >test-outp13 2>&1)
> 
>     real    172m25.311s
>     user    132m15.133s
>     sys     66m43.122s
>     $
> 
> The t0061.3 and t0070.3 failures don't require much discussion. The t4130
> failure is an intermittent "racy git" issue that has been on my TODO list
> for several years. t9300 also fails intermittently. However, t9010 fails
> every time for me, hanging the test suite (although ^C interrupts it just
> fine).
> 
> I have a "fix" for t9010 that looks like:
> 
>     diff --git a/t/t9010-svn-fe.sh b/t/t9010-svn-fe.sh
>     index b7eed24..4d01e3b 100755
>     --- a/t/t9010-svn-fe.sh
>     +++ b/t/t9010-svn-fe.sh
>     @@ -22,10 +22,9 @@ try_dump () {
>             maybe_fail_fi=${3:+test_$3} &&
>     
>             {
>     -               $maybe_fail_svnfe test-svn-fe "$input" >stream 3<backflow &
>     -       } &&
>     -       $maybe_fail_fi git fast-import --cat-blob-fd=3 <stream 3>backflow &&
>     -       wait $!
>     +               $maybe_fail_svnfe test-svn-fe "$input" 3<backflow
>     +       } |
>     +       $maybe_fail_fi git fast-import --cat-blob-fd=3 3>backflow
>      }
>     
>      properties () {
> 
> but I have not tested this patch enough to be happy to submit it (I have
> some suspicions that it would still fail intermittently, just like t9300).
> 
> Also, commit 7bc0911d ("test-lib: Fix say_color () not to interpret \a\b\c
> in the message", 11-10-2012) caused several random test failures. (don't ask
> me why). So, before each test run, I have to apply the following:
> 
>     diff --git a/t/test-lib.sh b/t/test-lib.sh
>     index f50f834..ed32b7f 100644
>     --- a/t/test-lib.sh
>     +++ b/t/test-lib.sh
>     @@ -230,7 +230,7 @@ else
>             say_color() {
>                     test -z "$1" && test -n "$quiet" && return
>                     shift
>     -               printf "%s\n" "$*"
>     +               echo -E "$*"
>             }
>      fi
> 
> which effectively reverts that commit.
> 
> So, as I said, a "magical mystery tour". :-D
> 
> ATB,
> Ramsay Jones
> 
> 
First of all,
the patch we are talking about does not any regrssions at my side.

Second,
I was able to do some testing.
The hanging is not 100% reproducable, and I had one hanging in Git 1.8.1

Turning the screen saver off in Win XP helps that the machine reacts,
and using process explorer showed that the hanging is happening
in test cases doing "git fetch" (or git pull) from a local repository.
What I can see is one git-fetch.exe together with git-upload-pack.exe

From my understanding is the upload-pack a "forked" exe from the main git,
and they should talk to each other.
One interesting part is in run-command.c, and there we have different code for MiNGW
and the "rest of the world", Linux/Unix/cygwin.

I tried to steal the code around mingw_spawnvpe(), but could not get that working (yet).

Another approach could be to steal the pipe() from mingw.

Does anybody know if we have a similar problem (hanging TC which test fetch/pull)
in MinGW/msysGit?

If no, why not ;-)

Thanks for reading
/Torsten