summaryrefslogtreecommitdiffstats
path: root/Bugzilla/DB
diff options
context:
space:
mode:
authorlpsolit%gmail.com <>2005-07-08 06:15:20 +0200
committerlpsolit%gmail.com <>2005-07-08 06:15:20 +0200
commit230976efc0233c7157f6b6a3919e5eb885dbe4a7 (patch)
tree2cadf7119883a3d6293daba9c228791689e17186 /Bugzilla/DB
parent6e29c7cd06afac55962dac20421bddbf17954906 (diff)
downloadbugzilla-230976efc0233c7157f6b6a3919e5eb885dbe4a7.tar.gz
bugzilla-230976efc0233c7157f6b6a3919e5eb885dbe4a7.tar.xz
Bug 299212: "already locked" errors should be more informative - Patch by Frédéric Buclin <LpSolit@gmail.com> r=glob a=justdave
Diffstat (limited to 'Bugzilla/DB')
-rw-r--r--Bugzilla/DB/Mysql.pm12
-rw-r--r--Bugzilla/DB/Pg.pm10
2 files changed, 13 insertions, 9 deletions
diff --git a/Bugzilla/DB/Mysql.pm b/Bugzilla/DB/Mysql.pm
index 832034a97..3472a351d 100644
--- a/Bugzilla/DB/Mysql.pm
+++ b/Bugzilla/DB/Mysql.pm
@@ -64,7 +64,7 @@ sub new {
# all class local variables stored in DBI derived class needs to have
# a prefix 'private_'. See DBI documentation.
- $self->{private_bz_tables_locked} = 0;
+ $self->{private_bz_tables_locked} = "";
bless ($self, $class);
@@ -159,13 +159,15 @@ sub sql_group_by {
sub bz_lock_tables {
my ($self, @tables) = @_;
+ my $list = join(', ', @tables);
# Check first if there was no lock before
if ($self->{private_bz_tables_locked}) {
- ThrowCodeError("already_locked");
+ ThrowCodeError("already_locked", { current => $self->{private_bz_tables_locked},
+ new => $list });
} else {
- $self->do('LOCK TABLE ' . join(', ', @tables));
+ $self->do('LOCK TABLE ' . $list);
- $self->{private_bz_tables_locked} = 1;
+ $self->{private_bz_tables_locked} = $list;
}
}
@@ -180,7 +182,7 @@ sub bz_unlock_tables {
} else {
$self->do("UNLOCK TABLES");
- $self->{private_bz_tables_locked} = 0;
+ $self->{private_bz_tables_locked} = "";
}
}
diff --git a/Bugzilla/DB/Pg.pm b/Bugzilla/DB/Pg.pm
index a83b75bd9..97473e564 100644
--- a/Bugzilla/DB/Pg.pm
+++ b/Bugzilla/DB/Pg.pm
@@ -70,7 +70,7 @@ sub new {
# all class local variables stored in DBI derived class needs to have
# a prefix 'private_'. See DBI documentation.
- $self->{private_bz_tables_locked} = 0;
+ $self->{private_bz_tables_locked} = "";
bless ($self, $class);
@@ -147,9 +147,11 @@ sub sql_string_concat {
sub bz_lock_tables {
my ($self, @tables) = @_;
+ my $list = join(', ', @tables);
# Check first if there was no lock before
if ($self->{private_bz_tables_locked}) {
- ThrowCodeError("already_locked");
+ ThrowCodeError("already_locked", { current => $self->{private_bz_tables_locked},
+ new => $list });
} else {
my %read_tables;
my %write_tables;
@@ -175,7 +177,7 @@ sub bz_lock_tables {
' IN ROW SHARE MODE') if keys %read_tables;
Bugzilla->dbh->do('LOCK TABLE ' . join(', ', keys %write_tables) .
' IN ROW EXCLUSIVE MODE') if keys %write_tables;
- $self->{private_bz_tables_locked} = 1;
+ $self->{private_bz_tables_locked} = $list;
}
}
@@ -188,7 +190,7 @@ sub bz_unlock_tables {
return if $abort;
ThrowCodeError("no_matching_lock");
} else {
- $self->{private_bz_tables_locked} = 0;
+ $self->{private_bz_tables_locked} = "";
# End transaction, tables will be unlocked automatically
if ($abort) {
$self->bz_rollback_transaction();