Browse Source

git-gui: ensure correct application termination in git-gui--askpass

With Tk 8.5 the askpass utility can hang waiting for the wish shell
implicit event loop to exit. This patch uses an explicit event loop
to ensure correct application termination.

Reported-by: Anders Kaseorg <andersk@mit.edu>
Tested-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
maint
Pat Thoyts 15 years ago
parent
commit
aef0b48ef0
  1. 19
      git-gui--askpass

19
git-gui--askpass

@ -5,6 +5,8 @@ exec wish "$0" -- "$@"
# This is a trivial implementation of an SSH_ASKPASS handler. # This is a trivial implementation of an SSH_ASKPASS handler.
# Git-gui uses this script if none are already configured. # Git-gui uses this script if none are already configured.


package require Tk

set answer {} set answer {}
set yesno 0 set yesno 0
set rc 255 set rc 255
@ -30,16 +32,20 @@ if {!$yesno} {


frame .b frame .b
button .b.ok -text OK -command finish button .b.ok -text OK -command finish
button .b.cancel -text Cancel -command {destroy .} button .b.cancel -text Cancel -command cancel


pack .b.ok -side left -expand 1 pack .b.ok -side left -expand 1
pack .b.cancel -side right -expand 1 pack .b.cancel -side right -expand 1
pack .b -side bottom -fill x -padx 10 -pady 10 pack .b -side bottom -fill x -padx 10 -pady 10


bind . <Visibility> {focus -force .e} bind . <Visibility> {focus -force .e}
bind . <Key-Return> finish bind . <Key-Return> [list .b.ok invoke]
bind . <Key-Escape> {destroy .} bind . <Key-Escape> [list .b.cancel invoke]
bind . <Destroy> {exit $rc} bind . <Destroy> {set rc $rc}

proc cancel {} {
set ::rc 255
}


proc finish {} { proc finish {} {
if {$::yesno} { if {$::yesno} {
@ -50,10 +56,11 @@ proc finish {} {
} }
} }


set ::rc 0
puts $::answer puts $::answer
destroy . set ::rc 0
} }


wm title . "OpenSSH" wm title . "OpenSSH"
tk::PlaceWindow . tk::PlaceWindow .
vwait rc
exit $rc

Loading…
Cancel
Save