summaryrefslogtreecommitdiff
path: root/FS/bin/freeside-selfservice-xmlrpcd
diff options
context:
space:
mode:
authorivan <ivan>2010-07-03 04:19:59 +0000
committerivan <ivan>2010-07-03 04:19:59 +0000
commit86dedc46fa7e5273f42534a9baac3de4d4fd0b61 (patch)
tree206f1f2d922ee734dabfa471f449043ca0c8d733 /FS/bin/freeside-selfservice-xmlrpcd
parent98b9624b75d092f9451132182bf17fdf24ce405e (diff)
fix leaking db connections in freeside-selfservice-xmlrpcd, RT#7780
Diffstat (limited to 'FS/bin/freeside-selfservice-xmlrpcd')
-rwxr-xr-xFS/bin/freeside-selfservice-xmlrpcd25
1 files changed, 10 insertions, 15 deletions
diff --git a/FS/bin/freeside-selfservice-xmlrpcd b/FS/bin/freeside-selfservice-xmlrpcd
index f5a4b9895..fa745ecf2 100755
--- a/FS/bin/freeside-selfservice-xmlrpcd
+++ b/FS/bin/freeside-selfservice-xmlrpcd
@@ -23,8 +23,8 @@ use POE::Wheel::SocketFactory; # For serving socket connections.
use XMLRPC::Transport::HTTP; #SOAP::Transport::HTTP;
use XMLRPC::Lite; # for XMLRPC::Serializer
-use FS::Daemon qw(daemonize1 drop_root logfile daemonize2 );
-use FS::UID qw(adminsuidsetup forksuidsetup);
+use FS::Daemon qw( daemonize1 drop_root logfile daemonize2 );
+use FS::UID qw( adminsuidsetup forksuidsetup dbh );
use FS::Conf;
use FS::ClientAPI qw( load_clientapi_modules );
use FS::ClientAPI_XMLRPC; #FS::SelfService::XMLRPC;
@@ -68,6 +68,10 @@ my $conf = new FS::Conf;
die "not running; selfservice-xmlrpc conf option is off\n"
unless $conf->exists('selfservice-xmlrpc');
+#parent doesn't need to hold a DB connection open
+dbh->disconnect;
+undef $FS::UID::dbh;
+
###
# the main loop
###
@@ -186,6 +190,9 @@ sub server_do_fork {
$heap->{is_a_child} = 1;
$heap->{children} = {};
+ #freeside db connection, etc.
+ forksuidsetup($user);
+
return;
}
}
@@ -280,7 +287,7 @@ sub client_stop {
sub client_got_request {
my ( $heap, $request ) = @_[ HEAP, ARG0 ];
- freeside_kid_time();
+ forksuidsetup($user) unless dbh && dbh->ping;
my $serializer = new XMLRPC::Serializer(typelookup => \%typelookup);
@@ -305,18 +312,6 @@ sub client_got_request {
$heap->{client}->put($response);
}
-#setup the database connection and other things FS::SelfService::XMLRPC
-#expects to be in place. aka "kid time" in freeside-selfservice-server
-sub freeside_kid_time {
-
- #we did need a db connection in the parent, so
- ##get new db handle
- $FS::UID::dbh->{InactiveDestroy} = 1;
- forksuidsetup($user);
-
- #i guess that was it
-}
-
### The client handler received an error. Stop the ReadWrite wheel,
### which also closes the socket.