Skip to content

Commit

Permalink
gitk: Kill back-end processes on window close
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Alexander Gavrilov authored and Paul Mackerras committed Jul 31, 2008
1 parent c11ff12 commit e2f90ee
Showing 1 changed file with 25 additions and 10 deletions.
35 changes: 25 additions & 10 deletions gitk
Original file line number Diff line number Diff line change
Expand Up @@ -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) {}
}
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit e2f90ee

Please sign in to comment.