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 
            ;
        
------------------------------------------------------------------------
        
------------------------------------------------------------------------
        -----------------------
        
        
        
        


Reply via email to