summaryrefslogtreecommitdiffstats
path: root/Bugzilla/Field.pm
diff options
context:
space:
mode:
authorFrédéric Buclin <LpSolit@gmail.com>2012-10-19 01:21:44 +0200
committerFrédéric Buclin <LpSolit@gmail.com>2012-10-19 01:21:44 +0200
commitfc443eda7c58d236302c9b07017ba6cb059a6120 (patch)
treeb06fb7795aa0c23f7503ac8dc73b0d33e397dd05 /Bugzilla/Field.pm
parentddc967463fa77bd756601fbe23b1439f2c88ac79 (diff)
downloadbugzilla-fc443eda7c58d236302c9b07017ba6cb059a6120.tar.gz
bugzilla-fc443eda7c58d236302c9b07017ba6cb059a6120.tar.xz
Bug 531243: Bugzilla crashes on show_bug if it's hit while a custom field is being added
r=justdave a=LpSolit
Diffstat (limited to 'Bugzilla/Field.pm')
-rw-r--r--Bugzilla/Field.pm10
1 files changed, 9 insertions, 1 deletions
diff --git a/Bugzilla/Field.pm b/Bugzilla/Field.pm
index 64d5da574..87b307cb7 100644
--- a/Bugzilla/Field.pm
+++ b/Bugzilla/Field.pm
@@ -1035,7 +1035,11 @@ sub create {
# the parameter isn't sent to create().
$params->{sortkey} = undef if !exists $params->{sortkey};
$params->{type} ||= 0;
-
+ # We mark the custom field as obsolete till it has been fully created,
+ # to avoid race conditions when viewing bugs at the same time.
+ my $is_obsolete = $params->{obsolete};
+ $params->{obsolete} = 1 if $params->{custom};
+
$dbh->bz_start_transaction();
$class->check_required_create_fields(@_);
my $field_values = $class->run_create_validators($params);
@@ -1064,6 +1068,10 @@ sub create {
# Insert a default value of "---" into the legal values table.
$dbh->do("INSERT INTO $name (value) VALUES ('---')");
}
+
+ # Restore the original obsolete state of the custom field.
+ $dbh->do('UPDATE fielddefs SET obsolete = 0 WHERE id = ?', undef, $field->id)
+ unless $is_obsolete;
}
return $field;