summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Bugzilla/Field/Choice.pm12
1 files changed, 6 insertions, 6 deletions
diff --git a/Bugzilla/Field/Choice.pm b/Bugzilla/Field/Choice.pm
index 5f1578d2b..fe5c7bdcb 100644
--- a/Bugzilla/Field/Choice.pm
+++ b/Bugzilla/Field/Choice.pm
@@ -93,18 +93,18 @@ sub type {
# For generic classes, we use a lowercase class name, so as
# not to interfere with any real subclasses we might make some day.
my $package = "Bugzilla::Field::Choice::$field_name";
+ Bugzilla->request_cache->{"field_$package"} = $field_obj;
- # We check defined so that the package and the stored field are only
- # created once globally (at least per request). We prefix it with
- # field_ (instead of suffixing it) so that we don't somehow conflict
- # with the names of custom fields.
- if (!defined Bugzilla->request_cache->{"field_$package"}) {
+ # This package only needs to be created once. We check if the DB_TABLE
+ # glob for this package already exists, which tells us whether or not
+ # we need to create the package (this works even under mod_perl, where
+ # this package definition will persist across requests)).
+ if (!defined *{"${package}::DB_TABLE"}) {
eval <<EOC;
package $package;
use base qw(Bugzilla::Field::Choice);
use constant DB_TABLE => '$field_name';
EOC
- Bugzilla->request_cache->{"field_$package"} = $field_obj;
}
return $package;