[svn:qpsmtpd] rev 419 - branches/high_perf/lib/Danga
[email protected] 12 May 2005 23:04:53 -0000
| Newsgroups | perl.cvs.qpsmtpd |
|---|---|
| Message-ID | <[email protected]> |
Author: msergeant
Date: Thu May 12 16:04:53 2005
New Revision: 419
Modified:
branches/high_perf/lib/Danga/Socket.pm
Log:
Make post loop callbacks a local var so we don't have to iterate through as
much
Modified: branches/high_perf/lib/Danga/Socket.pm
==============================================================================
--- branches/high_perf/lib/Danga/Socket.pm (original)
+++ branches/high_perf/lib/Danga/Socket.pm Thu May 12 16:04:53 2005
@@ -73,7 +73,7 @@ our (
%OtherFds, # A hash of "other" (non-Danga::Socket) file
# descriptors for the event loop to track.
$PostLoopCallback, # subref to call at the end of each loop, if defined
- $LocalPostLoopCallback, # true if there is a local post loop callback in effect
+ %PLCMap, # fd (num) -> PostLoopCallback
);
%OtherFds = ();
@@ -375,13 +375,8 @@ sub PostEventLoop {
@ToClose = ();
# now we're at the very end, call per-connection callbacks if defined
- if ($LocalPostLoopCallback) {
- for my $fd (%DescriptorMap) {
- my $pob = $DescriptorMap{$fd};
- if( defined $pob->{post_loop_callback} ) {
- return unless $pob->{post_loop_callback}->(\%DescriptorMap, \%OtherFds);
- }
- }
+ for my $plc (values %PLCMap) {
+ return unless $plc->(\%DescriptorMap, \%OtherFds);
}
# now we're at the very end, call global callback if defined
@@ -810,12 +805,10 @@ sub SetPostLoopCallback {
if(ref $class) {
my Danga::Socket $self = $class;
if( defined $ref && ref $ref eq 'CODE' ) {
- $LocalPostLoopCallback++;
- $self->{post_loop_callback} = $ref;
+ $PLCMap{$self->{fd}} = $ref;
}
else {
- $LocalPostLoopCallback--;
- delete $self->{post_loop_callback};
+ delete $PLCMap{$self->{fd}};
}
}
else {
@@ -823,6 +816,11 @@ sub SetPostLoopCallback {
}
}
+sub DESTROY {
+ my Danga::Socket $self = shift;
+ delete $PLCMap{$self->{fd}};
+}
+
#####################################################################
### U T I L I T Y F U N C T I O N S
#####################################################################