From: Pat Thoyts Date: Sun, 15 Aug 2010 23:53:18 GMT Subject: Re: [PATCH v2 git-gui] git-gui--askpass: Do not hang on exit Message-ID: <87mxsnh1qp.fsf@fox.patthoyts.tk> In-Reply-To: <20100704212439.GA1765@burratino> Jonathan Nieder writes: >Anders Kaseorg wrote: > >> When git-gui--askpass is manually copied from the source into >> /usr/lib/git-core, though, it doesn’t particularly work; its window >> just freezes after the password is typed. > >The problem seems to be the > > bind . {exit $::rc} > >line; apparently each exit causes the window to be destroyed again, >resulting in git gui hanging. > >Reported-by: Anders Kaseorg >Signed-off-by: Jonathan Nieder >--- > I wrote: > > > @@ -52,7 +52,9 @@ proc finish {} { > > > > set ::rc 0 > > puts $::answer > > + bind . {} > > destroy . > > but that does nothing to help the case when the destroy event > comes from the window manager. Here’s a saner patch (sorry for > the noise). > >diff --git a/git-gui--askpass b/git-gui--askpass >index 12e117e..20b8799 100755 >--- a/git-gui--askpass >+++ b/git-gui--askpass >@@ -39,7 +39,10 @@ pack .b -side bottom -fill x -padx 10 -pady 10 > bind . {focus -force .e} > bind . finish > bind . {destroy .} >-bind . {exit $rc} >+bind . { >+ bind . {} >+ exit $::rc >+} > > proc finish {} { > if {$::yesno} { I'm not so keen to take this patch for git-gui. Exiting from bindings isn't such great Tk style and I'd rather we used a vwait to explicitly run the event loop and exit after terminating that. The following patch does this. 'git-gui: change the termination checks to avoid potential hang' I'm not certain of the conditions that produced the error this is supposed to fix. I have not reproduced the hang so far on a linux system using Tk 8.5. It would be good to get confirmation that my proposed patch actually solves the issue reported. -- Pat Thoyts http://www.patthoyts.tk/ PGP fingerprint 2C 6E 98 07 2C 59 C8 97 10 CE 11 E6 04 E0 B9 DD