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 2.480 seconds using v1.01-cache-2.11-cpan-71847e10f99 )