POE
view release on metacpan or search on metacpan
lib/POE/Kernel.pm view on Meta::CPAN
$hostname = hostname() unless defined $hostname;
my $new_id = $self->[KR_ID] = join(
"-", $hostname,
map { unpack "H*", $_ }
map { pack "N", $_ }
(monotime(), $$, ++$kr_id_seq)
);
if (defined $old_id) {
$self->_data_sig_relocate_kernel_id($old_id, $new_id);
$self->_data_ses_relocate_kernel_id($old_id, $new_id);
$self->_data_sid_relocate_kernel_id($old_id, $new_id);
$self->_data_handle_relocate_kernel_id($old_id, $new_id);
$self->_data_ev_relocate_kernel_id($old_id, $new_id);
$self->_data_alias_relocate_kernel_id($old_id, $new_id);
}
}
sub ID { $poe_kernel->[KR_ID] }
# Resolve an ID to a session reference. This function is virtually
# moot now that _resolve_session does it too. This explicit call will
# be faster, though, so it's kept for things that can benefit from it.
sub ID_id_to_session {
lib/POE/Resource/Aliases.pm view on Meta::CPAN
# { $alias => $session_ref,
# ...,
# },
# ...,
# );
sub _data_alias_initialize {
$poe_kernel->[KR_ALIASES] = \%kr_aliases;
}
sub _data_alias_relocate_kernel_id {
my ($self, $old_id, $new_id) = @_;
return unless exists $kr_ses_to_alias{$old_id};
$kr_ses_to_alias{$new_id} = delete $kr_ses_to_alias{$old_id};
}
### End-run leak checking. Returns true if finalization was ok, or
### false if it failed.
sub _data_alias_finalize {
my $finalized_ok = 1;
lib/POE/Resource/Events.pm view on Meta::CPAN
### Begin-run initialization.
sub _data_ev_initialize {
my ($self, $queue) = @_;
$kr_queue = $queue;
}
### End-run leak checking.
sub _data_ev_relocate_kernel_id {
my ($self, $old_id, $new_id) = @_;
$event_count{$new_id} = delete $event_count{$old_id}
if exists $event_count{$old_id};
$post_count{$new_id} = delete $post_count{$old_id}
if exists $post_count{$old_id};
}
sub _data_ev_finalize {
my $finalized_ok = 1;
lib/POE/Resource/Extrefs.pm view on Meta::CPAN
### The count of all extra references used in the system.
my %kr_extra_refs;
# ( $session_id =>
# { $tag => $count,
# ...,
# },
# ...,
# );
sub _data_extref_relocate_kernel_id {
my ($self, $old_id, $new_id) = @_;
return unless exists $kr_extra_refs{$old_id};
$kr_extra_refs{$new_id} = delete $kr_extra_refs{$old_id};
}
### End-run leak checking.
sub _data_extref_finalize {
my $finalized_ok = 1;
foreach my $session_id (keys %kr_extra_refs) {
lib/POE/Resource/FileHandles.pm view on Meta::CPAN
sub SH_REFCOUNT () { 1 } # $total_reference_count,
sub SH_MODECOUNT () { 2 } # [ $read_reference_count, (MODE_RD)
# $write_reference_count, (MODE_WR)
# $expedite_reference_count, (MODE_EX)
# --- CEASE SUB STRUCT --- # ],
# ],
# ...
# },
# },
sub _data_handle_relocate_kernel_id {
my ($self, $old_id, $new_id) = @_;
foreach my $fd_rec (values %kr_filenos) {
my $rd_rec = $fd_rec->[FNO_MODE_RD][FMO_SESSIONS];
$rd_rec->{$new_id} = delete $rd_rec->{$old_id} if exists $rd_rec->{$old_id};
my $wr_rec = $fd_rec->[FNO_MODE_WR][FMO_SESSIONS];
$wr_rec->{$new_id} = delete $wr_rec->{$old_id} if exists $wr_rec->{$old_id};
my $ex_rec = $fd_rec->[FNO_MODE_EX][FMO_SESSIONS];
lib/POE/Resource/SIDs.pm view on Meta::CPAN
# ...,
# );
my $kr_sid_seq = 0;
sub _data_sid_initialize {
$poe_kernel->[KR_SESSION_IDS] = \%kr_session_ids;
$poe_kernel->[KR_SID_SEQ] = \$kr_sid_seq;
}
sub _data_sid_relocate_kernel_id {
my ($self, $old_id, $new_id) = @_;
$kr_session_ids{$new_id} = delete $kr_session_ids{$old_id}
if exists $kr_session_ids{$old_id};
}
### End-run leak checking.
sub _data_sid_finalize {
my $finalized_ok = 1;
while (my ($sid, $ses) = each(%kr_session_ids)) {
lib/POE/Resource/Sessions.pm view on Meta::CPAN
# };
sub SS_SESSION () { 0 }
sub SS_REFCOUNT () { 1 }
sub SS_PARENT () { 2 }
sub SS_CHILDREN () { 3 }
sub SS_PROCESSES () { 4 }
BEGIN { $POE::Kernel::poe_kernel->[KR_SESSIONS] = \%kr_sessions; }
sub _data_ses_relocate_kernel_id {
my ($self, $old_id, $new_id) = @_;
while (my ($sid, $ses_rec) = each %kr_sessions) {
my $children = $ses_rec->[SS_CHILDREN];
$children->{$new_id} = delete $children->{$old_id}
if exists $children->{$old_id};
}
$kr_sessions{$new_id} = delete $kr_sessions{$old_id}
if exists $kr_sessions{$old_id};
lib/POE/Resource/Signals.pm view on Meta::CPAN
# }
# }
my %kr_sessions_to_pids;
# { $session_id => { $pid => 1 } }
sub PID_SESSION () { 0 }
sub PID_EVENT () { 1 }
sub PID_ARGS () { 2 }
sub _data_sig_relocate_kernel_id {
my ($self, $old_id, $new_id) = @_;
while (my ($signal, $sig_rec) = each %kr_signals) {
next unless exists $sig_rec->{$old_id};
$sig_rec->{$new_id} = delete $sig_rec->{$old_id};
}
$kr_sessions_to_signals{$new_id} = delete $kr_sessions_to_signals{$old_id}
if exists $kr_sessions_to_signals{$old_id};
lib/POE/Resource/Signals.pm view on Meta::CPAN
# show up before it is called. Should we just detect forking and do it
# for the user? Probably not...
if( $$ != $signal_pipe_pid ) {
_warn(
"<sg> Signal caught in different process than POE::Kernel initialized " .
"(newPID=$$ oldPID=$signal_pipe_pid sig=$signal_name).\n"
);
_warn(
"Call POE::Kernel->has_forked() in the child process " .
"to relocate the signal handler.\n"
);
}
# We're registering signals in a list. Pipes have more finite
# capacity, so we'll just write a single-byte semaphore-like token.
# It's up to the reader to process the list. Duplicates are
# permitted, and their ordering may be significant. Precedent:
# http://search.cpan.org/perldoc?IPC%3A%3AMorseSignals
push @pending_signals, [
( run in 0.432 second using v1.01-cache-2.11-cpan-71847e10f99 )