]> git.donarmstrong.com Git - debbugs.git/commitdiff
* fix locking in lock_read_all_merge_bugs
authorDon Armstrong <don@donarmstrong.com>
Sun, 10 Aug 2008 19:41:01 +0000 (12:41 -0700)
committerDon Armstrong <don@donarmstrong.com>
Sun, 10 Aug 2008 19:41:01 +0000 (12:41 -0700)
Debbugs/Status.pm

index 0030a7ccda131d9f348816e51e3b4f34ff4049b2..0a4985f925de1e4e006bb1543c863aa408a0d672 100644 (file)
@@ -321,20 +321,24 @@ even if all of the others were read properly.
 
 sub lock_read_all_merged_bugs {
     my ($bug_num,$location) = @_;
+    my $locks = 0;
     my @data = (lockreadbug(@_));
     if (not @data and not defined $data[0]) {
-       return (0,undef);
+       return ($locks,undef);
     }
+    $locks++;
     if (not length $data[0]->{mergedwith}) {
-       return (1,@data);
+       return ($locks,@data);
     }
     unfilelock();
+    $locks--;
     filelock("$config{spool_dir}/lock/merge");
-    my $locks = 0;
+    $locks++;
     @data = (lockreadbug(@_));
     if (not @data and not defined $data[0]) {
        unfilelock(); #for merge lock above
-       return (0,undef);
+       $locks--;
+       return ($locks,undef);
     }
     $locks++;
     my @bugs = split / /, $data[0]->{mergedwith};
@@ -355,15 +359,15 @@ sub lock_read_all_merged_bugs {
        }
        # perform a sanity check to make sure that the merged bugs are
        # all merged with eachother
-       my $expectmerge= join(' ',grep($_ != $bug, sort { $a <=> $b } @bugs));
+       my $expectmerge= join(' ',grep {$_ != $bug } sort { $a <=> $b } (@bugs,$bug_num));
        if ($newdata->{mergedwith} ne $expectmerge) {
            for (1..$locks) {
                unfilelock();
            }
-           die "Bug $bug_num differs from bug $bug: ($newdata->{mergedwith}) vs. ($expectmerge) (".join(' ',@bugs).")";
+           die "Bug $bug_num differs from bug $bug: ($newdata->{bug_num}: $newdata->{mergedwith}) vs. ($expectmerge) (".join(' ',@bugs).")";
        }
     }
-    return (2,@data);
+    return ($locks,@data);
 }