gitk: Kill back-end processes on window close
When collecting commits for a rarely changed, or recently created file or directory, rev-list may work for a noticeable period of time without producing any output. Such processes don't receive SIGPIPE for a while after gitk is closed, thus becoming runaway CPU hogs. Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
parent
c11ff120f3
commit
e2f90ee45c
35
gitk
35
gitk
@ -375,19 +375,33 @@ proc start_rev_list {view} {
|
||||
return 1
|
||||
}
|
||||
|
||||
proc stop_instance {inst} {
|
||||
global commfd leftover
|
||||
|
||||
set fd $commfd($inst)
|
||||
catch {
|
||||
set pid [pid $fd]
|
||||
exec kill $pid
|
||||
}
|
||||
catch {close $fd}
|
||||
nukefile $fd
|
||||
unset commfd($inst)
|
||||
unset leftover($inst)
|
||||
}
|
||||
|
||||
proc stop_backends {} {
|
||||
global commfd
|
||||
|
||||
foreach inst [array names commfd] {
|
||||
stop_instance $inst
|
||||
}
|
||||
}
|
||||
|
||||
proc stop_rev_list {view} {
|
||||
global commfd viewinstances leftover
|
||||
global viewinstances
|
||||
|
||||
foreach inst $viewinstances($view) {
|
||||
set fd $commfd($inst)
|
||||
catch {
|
||||
set pid [pid $fd]
|
||||
exec kill $pid
|
||||
}
|
||||
catch {close $fd}
|
||||
nukefile $fd
|
||||
unset commfd($inst)
|
||||
unset leftover($inst)
|
||||
stop_instance $inst
|
||||
}
|
||||
set viewinstances($view) {}
|
||||
}
|
||||
@ -2103,6 +2117,7 @@ proc makewindow {} {
|
||||
bind . <$M1B-minus> {incrfont -1}
|
||||
bind . <$M1B-KP_Subtract> {incrfont -1}
|
||||
wm protocol . WM_DELETE_WINDOW doquit
|
||||
bind . <Destroy> {stop_backends}
|
||||
bind . <Button-1> "click %W"
|
||||
bind $fstring <Key-Return> {dofind 1 1}
|
||||
bind $sha1entry <Key-Return> gotocommit
|
||||
|
Loading…
Reference in New Issue
Block a user