wow, cool. many thanks on where to look. I'll catch the exception and croak which should do the trick..
________________________________ From: David Davis [mailto:[EMAIL PROTECTED] Sent: Tuesday, June 27, 2006 3:05 PM To: Bob Maccione Cc: [email protected] Subject: Re: XMLRPC server problem (Perl 5.8) This is exceptions related. http://search.cpan.org/~rcaputo/POE-0.3502/lib/POE/Kernel.pm#Signal_Watc her_Methods An error in your _stop is causing an exception, POE delivers a signal, notices it needs to stop your session and calls _stop, then an error occurs, and you get the idea. HTH David On 6/23/06, Bob Maccione <[EMAIL PROTECTED]> wrote: Hi all, I'm running on linux with perl 5.8.8, poe 0.3501 and component...XMLRPC 0.05. If I have a runtime error in my code, POE goes into a loop (recursion it appears) where it eats up all the memory on the box and with logging enabled it generates the following line again and again.. <ss> stopping session 5 (POE::Session=ARRAY(0x9ff1cd0)) at /hilton/lib/perl5/site_perl/5.8.8/POE/Resource/Sessions.pm line 4575 -> _stop (from hilton/lib/perl5/site_perl/5.8.8/POE/Resource/Sessions.pm at 484) <ss> stopping session 5 (POE::Session=ARRAY(0x9ff1cd0)) at /hilton/lib/perl5/site_perl/5.8.8/POE/Resource/Sessions.pm line 4575 -> _stop (from hilton/lib/perl5/site_perl/5.8.8/POE/Resource/Sessions.pm at 484) I have the following test code that can reproduce it, can anyone confirm if it's a perl 5.8 or poe problem? We just moved to 5.8 and the latest POE (it's a new box and we wanted to start from scratch). It doesn't appear to happen on some real old poe and perl 5.6. there are 2 files, Foo and FooTst, run the Foo as nohup Foo & and then the FooTst will cause the problem. thanks for any help, bob maccione ------------------------------------------------------------------------ ------------------------------------------------------------------------ ----------------------- #!/usr/bin/perl -w -I . use strict; sub POE::Kernel::ASSERT_DEFAULT () { 1 } sub POE::Kernel::TRACE_SESSIONS () { 1 } use POE; use POE::Component::Server::XMLRPC; # # load up context and enable the Debug/Logging, etc. # Init(); Main(); =item Init() Do the one time stuff here.. =cut sub Init { Startup( 9191 ); } =item Main() Do the fancy main processing here.. =cut sub Main { $poe_kernel->run; exit 0; } =item Startup() This is called once from the main Init routine and is used to get the ball rolli ng. input: port - the port to listen on returns: nothin =cut sub Startup { my $port = shift; print STDERR "Startup: port $port\n"; POE::Component::Server::XMLRPC->new( alias => "xmlrpc", port => 'dev' ); POE::Session->create ( inline_states => { _start => \&SetupService, _stop => \&ShutdownService, # our stuff.. Test => \&Test, }, options => { trace => 1, debug => 1 }, ); # # we're done in the init stage for now } =item SetupService() Start the listening service. You need to add a post for each txn you'll want to support =cut sub SetupService { my $kernel = $_[KERNEL]; print STDERR "SetupService\n"; # set all of the services $kernel->post( xmlrpc => publish => dev => "Test" ); print STDERR "SetupService Done\n"; } =item ShutDownService() Stop the xmlrpc service =cut sub ShutDownService { print STDERR "ShutdownService\n"; # unset all of the services $_[KERNEL]->post( xmlrpc => rescind => dev => "Ngt" ); $_[KERNEL]->post( xmlrpc => rescind => dev => "Ping" ); $_[KERNEL]->post( xmlrpc => rescind => dev => "Search" ); $_[KERNEL]->post( xmlrpc => rescind => dev => "Test" ); print STDERR "ShutdownService Done\n"; } =item Test() Simple Test txn =cut sub Test { my $transaction = $_[ARG0]; my $params = $transaction->params(); print STDERR "Running test routine\n"; $params->Foo(); $transaction->return( "Pong" ); } ------------------------------------------------------------------------ ------------------------------------------------------------------------ ----------------------- this is the test code ------------------------------------------------------------------------ ------------------------------------------------------------------------ ----------------------- #!/usr/bin/perl -w # send in a ping txn to the listener use strict; use Debug; use Data::Dumper; use XMLRPC::Lite; my $name = ' http://localhost:9191/xmlrpc <http://localhost:9191/xmlrpc> '; my $txn = 'Ping'; print XMLRPC::Lite -> proxy('http://localhost:9191/?session=dev') -> Test() -> result ; ------------------------------------------------------------------------ ------------------------------------------------------------------------ -----------------------
