Okay, many thanks for that diagnosis Wolfgang - it was very helpful. I've applied Wolfgang's fix and added a "uniq" hack onto the temporary files function, hopefully this will sort it finally. I've tested with two files, file + CVS, CVS + CVS and it all looks like it works now.
I had to simplify the temp file cleanup handling to stop any files being left behind. I've attached the patch which you can apply like this: cd /usr/bin cp tkdiff /tmp # just in case patch < /tmp/tkdiff.diff Alternatively I'll be dropping you a private email with the new .deb in it ("dpkg -i tkdiff*.deb" to apply). If you could confirm that this fixes it for you that'd be great. I'll hang off uploading the fix for a couple of days. Thanks once again for your help and patience. Not so many thanks to Eclipse internet for leaving me without internet access for about 28 hours :-( Adrian
--- tkdiff.orig 2005-11-23 20:06:57.000000000 +0000 +++ tkdiff 2005-11-23 20:30:04.000000000 +0000 @@ -450,18 +450,21 @@ ############################################################################### # Create a temporary file and return its name ############################################################################### - +set uniq 0 proc tmpfile {n} { - global opts + global g opts + global uniq + set uniq [expr ($uniq + 1) ] set tmpdir [file nativename $opts(tmpdir)] - set tmpfile [file join $tmpdir "[pid]-$n"] + set tmpfile [file join $tmpdir "[pid]-$n-$uniq"] set access [list RDWR CREAT EXCL TRUNC] set perm 0600 if {[catch {open $tmpfile $access $perm} fid ]} { # something went wrong - error "Failed creating temporary file: $errorCode" + error "Failed creating temporary file: $fid" } close $fid + lappend g(tempfiles) $tmpfile return $tmpfile } @@ -746,9 +749,7 @@ fatal-error "Couldn't open file '$name'." } set first [open $temp1 w] - lappend g(tempfiles) $temp1 set second [open $temp2 w] - lappend g(tempfiles) $temp2 set firstname "" set secondname "" @@ -6359,14 +6360,8 @@ ############################################################################### proc del-tmp {} { - global g finfo + global g - if {$finfo(tmp,1)} { - file delete $finfo(pth,1) - } - if {$finfo(tmp,2)} { - file delete $finfo(pth,2) - } foreach f $g(tempfiles) { file delete $f }