summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorivan <ivan>2010-06-22 04:11:04 +0000
committerivan <ivan>2010-06-22 04:11:04 +0000
commited8610a65442c10720f2ccfab95ceefb140d8afc (patch)
tree8666214b33484f9651a4372406af9912fc5c0b09
parent2c394c70d2cc7c656dfc4a64a2509fb150c4dea6 (diff)
backport NoSignalHandlers patch to 1.9... should fix up RT initialization in freeside-selfservice-xmlrpcd such that processes still log after create_ticket happened, RT#7780
-rw-r--r--rt/lib/RT.pm12
-rw-r--r--rt/lib/RT.pm.in41
2 files changed, 48 insertions, 5 deletions
diff --git a/rt/lib/RT.pm b/rt/lib/RT.pm
index 033e5e607..df9bc839f 100644
--- a/rt/lib/RT.pm
+++ b/rt/lib/RT.pm
@@ -24,7 +24,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
#
# CONTRIBUTION SUBMISSION POLICY:
@@ -186,6 +186,8 @@ Conenct to the database, set up logging.
sub Init {
+ my @arg = @_;
+
CheckPerlRequirements();
#Get a database connection
@@ -202,7 +204,7 @@ sub Init {
$System = RT::System->new();
InitClasses();
- InitLogging();
+ InitLogging(@arg);
}
@@ -228,6 +230,8 @@ Create the RT::Logger object.
sub InitLogging {
+ my %arg = @_;
+
# We have to set the record separator ($, man perlvar)
# or Log::Dispatch starts getting
# really pissy, as some other module we use unsets it.
@@ -342,6 +346,8 @@ sub InitLogging {
## Mason). It will log all problems through the standard logging
## mechanism (see above).
+ unless ( $arg{'NoSignalHandlers'} ) {
+
$SIG{__WARN__} = sub {
# The 'wide character' warnings has to be silenced for now, at least
# until HTML::Mason offers a sane way to process both raw output and
@@ -363,6 +369,8 @@ $SIG{__DIE__} = sub {
die $_[0];
};
+ }
+
# }}}
}
diff --git a/rt/lib/RT.pm.in b/rt/lib/RT.pm.in
index 1a9bf083e..e668e6f7b 100644
--- a/rt/lib/RT.pm.in
+++ b/rt/lib/RT.pm.in
@@ -2,7 +2,7 @@
#
# COPYRIGHT:
#
-# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
# <jesse@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
@@ -24,7 +24,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/copyleft/gpl.html.
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
#
#
# CONTRIBUTION SUBMISSION POLICY:
@@ -186,6 +186,8 @@ Conenct to the database, set up logging.
sub Init {
+ my @arg = @_;
+
CheckPerlRequirements();
#Get a database connection
@@ -202,7 +204,7 @@ sub Init {
$System = RT::System->new();
InitClasses();
- InitLogging();
+ InitLogging(@arg);
}
@@ -228,6 +230,8 @@ Create the RT::Logger object.
sub InitLogging {
+ my %arg = @_;
+
# We have to set the record separator ($, man perlvar)
# or Log::Dispatch starts getting
# really pissy, as some other module we use unsets it.
@@ -342,6 +346,8 @@ sub InitLogging {
## Mason). It will log all problems through the standard logging
## mechanism (see above).
+ unless ( $arg{'NoSignalHandlers'} ) {
+
$SIG{__WARN__} = sub {
# The 'wide character' warnings has to be silenced for now, at least
# until HTML::Mason offers a sane way to process both raw output and
@@ -363,6 +369,8 @@ $SIG{__DIE__} = sub {
die $_[0];
};
+ }
+
# }}}
}
@@ -410,7 +418,9 @@ Load all modules that define base classes
sub InitClasses {
require RT::Tickets;
require RT::Transactions;
+ require RT::Attachments;
require RT::Users;
+ require RT::Principals;
require RT::CurrentUser;
require RT::Templates;
require RT::Queues;
@@ -423,6 +433,31 @@ sub InitClasses {
require RT::CustomFieldValues;
require RT::ObjectCustomFields;
require RT::ObjectCustomFieldValues;
+ require RT::Attributes;
+
+ # on a cold server (just after restart) people could have an object
+ # in the session, as we deserialize it so we never call constructor
+ # of the class, so the list of accessible fields is empty and we die
+ # with "Method xxx is not implemented in RT::SomeClass"
+ $_->_BuildTableAttributes foreach qw(
+ RT::Ticket
+ RT::Transaction
+ RT::Attachment
+ RT::User
+ RT::Principal
+ RT::Template
+ RT::Queue
+ RT::ScripAction
+ RT::ScripCondition
+ RT::Scrip
+ RT::Group
+ RT::GroupMember
+ RT::CustomField
+ RT::CustomFieldValue
+ RT::ObjectCustomField
+ RT::ObjectCustomFieldValue
+ RT::Attribute
+ );
}
# }}}