]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 476607: "Constant subroutine redefined" warnings from Bugzilla::Field::Choice
authormkanat%bugzilla.org <>
Mon, 23 Feb 2009 22:00:38 +0000 (22:00 +0000)
committermkanat%bugzilla.org <>
Mon, 23 Feb 2009 22:00:38 +0000 (22:00 +0000)
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, a=mkanat

Bugzilla/Field/Choice.pm

index 5f1578d2b02ea27e88659aa7c3cc822d7eda1a99..fe5c7bdcbb765b64531251d28c377a08facb1d20 100644 (file)
@@ -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;