Author: spadkins
Date: Wed Sep 12 14:40:39 2007
New Revision: 9940
Modified:
p5ee/trunk/App-Context/lib/App/Context/POE/Server.pm
Log:
possible fix for the C cancel mystery problem (repeating subrequests getting
run immediately after a cancel, Mantis #0000492), needs verification
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 Sep 12
14:40:39 2007
@@ -332,6 +332,9 @@
$state .= $self->_state_poe();
+ ### THIS DOESN'T WORK YET
+ #$state .= $self->_state_q();
+
$state .= $self->SUPER::_state();
&App::sub_exit($state) if ($App::trace);
@@ -360,6 +363,28 @@
return $state;
}
+### THIS DOESN'T WORK YET, THROWS AN EXCEPTION
+sub _state_q {
+ my $self = @_;
+ my $HOTEL_SITE_QNAME = "q-hotel_site";
+ my $HOTEL_COMPUTE_QNAME = "q-hotel_compute";
+ my $state = "";
+
+ for my $qname ("q-hotel_site", "q-hotel_compute") {
+ $state .= "$qname\n";
+ ### EXCEPTION IS THROWN HERE
+ my $q = $self->work_queue($qname);
+ my $entries = $q->{data};
+ foreach my $entry (@$entries) {
+ $state .= sprintf(" {", join("|",%$entry), "}\n");
+ }
+ $state .= "\n";
+ }
+ $state .= "\n";
+
+ return $state;
+}
+
# TODO: Implement this as a fork() or a context-level message to a node to
fork().
# i.e. messages such as "EVENT:" and "EVENT-OK:"
# Save the callback_event according to an event_token.
@@ -659,7 +684,10 @@
#$self->log({level=>2}, "S: abort_running_async_event :
async_event=[$async_event]\n");
$self->{num_async_events}--;
delete $self->{running_async_event}{$runtime_event_token};
- unshift(@$pending_async_events, $async_event);
+ ### TODO: This line was causing the mysterious Cancel and then re-run
of
+ ### events when passed a "C" Cancel request, discuss with SPA
+ ### ZWR doesn't think it is necessary
+ #unshift(@$pending_async_events, $async_event);
$self->_abort_running_async_event($runtime_event_token, @$async_event);
}
&App::sub_exit($async_event) if ($App::trace);