[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
 #####################################################################