Talk About Network



Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > Perl Cvs P5ee > [svn:p5ee] r104...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 1 of 1 Topic 634 of 694
Post > Topic >>

[svn:p5ee] r10419 - p5ee/trunk/App-Context/lib/App/Context/POE

by spadkins@[EMAIL PROTECTED] Dec 12, 2007 at 11:48 AM

Author: spadkins
Date: Wed Dec 12 11:48:50 2007
New Revision: 10419

Modified:
   p5ee/trunk/App-Context/lib/App/Context/POE/Server.pm

Log:
considerable reworking of the handoffs between context and work
controllers and work queue, unifying the way different layers queue up
work to be done and recognize that they have new work

Modified: p5ee/trunk/App-Context/lib/App/Context/POE/Server.pm
==============================================================================
--- p5ee/trunk/App-Context/lib/App/Context/POE/Server.pm	(original)
+++ p5ee/trunk/App-Context/lib/App/Context/POE/Server.pm	Wed Dec 12
11:48:50 2007
@[EMAIL PROTECTED]
 -409,6 +409,7 @[EMAIL PROTECTED]
             && $unique_event_method
             && ($self->count_in_pending_async_events($unique_event_name,
$unique_event_method) <= $count)) ) {
         push(@[EMAIL PROTECTED]
>{pending_async_events}}, [ $event, $callback_event
]);
+        $self->poe_yield($self->{poe_kernel},
"poe_dispatch_pending_async_events");
     }
 
     &App::sub_exit($event_token) if ($App::trace);
@[EMAIL PROTECTED]
 -840,17 +841,14 @[EMAIL PROTECTED]
 
 sub poe_yield {
     &App::sub_entry if ($App::trace);
-    my ($self, $kernel, $state, $max_count, $calling_code) = @[EMAIL PROTECTED]
    my ($self, $kernel, $state, $max_count) = @[EMAIL PROTECTED]
 
+    my $count = $self->{poe_count}{$state} || 0;
     $max_count ||= 1;
-    if (!defined($self->{poe_count}{$state})) {
-        $self->{poe_count}{$state} = 1;
-    }
-    else {
-        $self->{poe_count}{$state}++;
-    }    
-    if ($self->{poe_count}{$state} <= $max_count) {
-        $kernel->yield($state, $calling_code);
+    if ($count < $max_count) {
+        $count++;
+        $self->{poe_count}{$state} = $count;
+        $kernel->yield($state);
     }
 
     &App::sub_exit() if ($App::trace);
@[EMAIL PROTECTED]
 -923,7 +921,8 @[EMAIL PROTECTED]
     
     ### This is mostly for the node, which needs this to spawn queued
execute subrequest events
     ### without it, subrequests get acquired by the node never spawns
children to shop it
-    $kernel->yield("poe_dispatch_pending_async_events");
+    $self->poe_yield($kernel, "poe_dispatch_pending_async_events");
+    $self->poe_yield($kernel, "poe_event_loop_extension");
     
     my $time = time();
     my (@[EMAIL PROTECTED]
);
@[EMAIL PROTECTED]
 -994,6 +993,7 @[EMAIL PROTECTED]
     &App::sub_entry if ($App::trace);
     my ( $self, $kernel, $heap ) = @[EMAIL PROTECTED]
 OBJECT, KERNEL, HEAP ];
     $self->log({level=>2},"POE: poe_event_loop_extension\n") if
$self->{options}{poe_trace};
+    $self->poe_yield_acknowledged("poe_event_loop_extension");
     my $event_loop_extensions = $self->{event_loop_extensions};
     my $async_events_added = 0;
     if ($event_loop_extensions && $#$event_loop_extensions > -1) {
@[EMAIL PROTECTED]
 -1005,7 +1005,6 @[EMAIL PROTECTED]
             $async_events_added += $events_executed;
         }
     }
-    $self->poe_yield($kernel, "poe_dispatch_pending_async_events", undef,
"poe_event_loop_extension");
 
     ### We want to delay this if there is nothing to do (to prevent
spinning unnecessary cycles constantly)
 
@[EMAIL PROTECTED]
 -1018,18 +1017,22 @[EMAIL PROTECTED]
     ### some capacity on a node might go underutilized until the delay
passes
     ### Another downside is it tightly couples this implementation in an
abstract class
     $self->log({level=>2}, "Server : poe_event_loop_extension :
async_events_added[$async_events_added] clear_pending[" .
$self->count_in_pending_async_events("mvworkd",
"_clear_pending_hotel_shop_requests") . "]\n");
-    if ($async_events_added ||
$self->count_in_pending_async_events("mvworkd",
"_clear_pending_hotel_shop_requests") > 0) {
-        $kernel->yield("poe_event_loop_extension");
-    }
-    else {
-        my $delay = .5;
-        $self->log({level=>2}, "Server : poe_event_loop_extension :
delaying $delay seconds\n");
-        $kernel->delay_set("poe_event_loop_extension", $delay);
+    #if ($async_events_added ||
$self->count_in_pending_async_events("mvworkd",
"_clear_pending_hotel_shop_requests") > 0) {
+    if ($async_events_added) {
+        $self->poe_yield($kernel, "poe_dispatch_pending_async_events");
+        $self->poe_yield($kernel, "poe_event_loop_extension");
     }
 
     &App::sub_exit() if ($App::trace);
 }
 
+sub trigger_event_loop_extension {
+    &App::sub_entry if ($App::trace);
+    my ($self) = @[EMAIL PROTECTED]
    $self->poe_yield($self->{poe_kernel}, "poe_event_loop_extension");
+    &App::sub_exit() if ($App::trace);
+}
+
 sub poe_run_event {
     &App::sub_entry if ($App::trace);
     my ( $self, $kernel, $heap, $event ) = @[EMAIL PROTECTED]
 OBJECT, KERNEL, HEAP, ARG0
];




 1 Posts in Topic:
[svn:p5ee] r10419 - p5ee/trunk/App-Context/lib/App/Context/POE
spadkins@[EMAIL PROTECTED  2007-12-12 11:48:51 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Wed May 14 19:12:41 CDT 2008.