gitk: Remove closed file descriptors from $blobdifffd
authorMarkus Hitter <mah@jump-ing.de>
Mon, 7 Nov 2016 15:01:17 +0000 (16:01 +0100)
committerPaul Mackerras <paulus@ozlabs.org>
Mon, 12 Dec 2016 09:39:37 +0000 (20:39 +1100)
One shouldn't have descriptors of already closed files around.

The first idea to deal with this (previously) ever growing array
was to remove it entirely, but it's needed to detect start of a
new diff with ths old diff not yet done. This happens when a user
clicks on the same commit in the commit list repeatedly without
delay.

Signed-off-by: Markus Hitter <mah@jump-ing.de>
Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
gitk
diff --git a/gitk b/gitk
index 08ff7ceb2bddd7d12df43ef0f5fc847d7b3e8bb4..e037a755a513ded085ff7c81551e935085cf8d26 100755 (executable)
--- a/gitk
+++ b/gitk
@@ -8073,7 +8073,11 @@ proc getblobdiffline {bdf ids} {
     $ctext conf -state normal
     while {[incr nr] <= 1000 && [gets $bdf line] >= 0} {
        if {$ids != $diffids || $bdf != $blobdifffd($ids)} {
+           # Older diff read. Abort it.
            catch {close $bdf}
+           if {$ids != $diffids} {
+               array unset blobdifffd $ids
+           }
            return 0
        }
        parseblobdiffline $ids $line
@@ -8082,6 +8086,7 @@ proc getblobdiffline {bdf ids} {
     blobdiffmaybeseehere [eof $bdf]
     if {[eof $bdf]} {
        catch {close $bdf}
+       array unset blobdifffd $ids
        return 0
     }
     return [expr {$nr >= 1000? 2: 1}]