----- Forwarded message from [EMAIL PROTECTED] -----

Date: Wed, 23 Feb 2000 19:44:17 +0100
Subject: CPAN Upload: JPRIT/Event-tcp-0.14.tar.gz
From: [EMAIL PROTECTED]
To: [EMAIL PROTECTED],
    [EMAIL PROTECTED]

The uploaded file

    Event-tcp-0.14.tar.gz

has entered CPAN as

  file: $CPAN/authors/id/JPRIT/Event-tcp-0.14.tar.gz
  size: 7083 bytes
   md5: a46a86e2f5448672a091f4ad706e5b73

No action is required on your part
Request entered by: JPRIT (Joshua N. Pritikin)
Request entered on: Wed, 23 Feb 2000 18:43:35 GMT
Request completed:  Wed, 23 Feb 2000 18:44:17 GMT

        Virtually Yours,
        Id: paused,v 1.68 1999/10/22 14:39:12 k Exp k 


----- End forwarded message -----

# This is a patch for Event-tcp-0.13 to update it to Event-tcp-0.14
# 
# To apply this patch:
# STEP 1: Chdir to the source directory.
# STEP 2: Run the 'applypatch' program with this patch file as input.
#
# If you do not have 'applypatch', it is part of the 'makepatch' package
# that you can fetch from the Comprehensive Perl Archive Network:
# http://www.perl.com/CPAN/authors/Johan_Vromans/makepatch-x.y.tar.gz
# In the above URL, 'x' should be 2 or higher.
#
# To apply this patch without the use of 'applypatch':
# STEP 1: Chdir to the source directory.
# STEP 2: Run the 'patch' program with this file as input.
#
#### End of Preamble ####

#### Patch data follows ####
gdiff -up '/usr/tmp/mp13568.d/old/Event-tcp-0.13/ChangeLog' 
'/usr/tmp/mp13568.d/new/Event-tcp-0.14/ChangeLog'
Index: ./ChangeLog
--- ./ChangeLog Tue Feb  1 11:51:13 2000
+++ ./ChangeLog Wed Feb 23 13:38:08 2000
@@ -1,3 +1,13 @@
+2000-02-23  Joshua Pritikin  <[EMAIL PROTECTED]>
+
+       * Release 0.14.
+
+2000-02-08  Joshua Pritikin  <[EMAIL PROTECTED]>
+
+       * Fix potential timing problems with join.t.
+
+       * Added tons of diagnostics to track down Event 0.65 bug.
+
 2000-02-01  Joshua Pritikin  <[EMAIL PROTECTED]>
 
        * Release 0.13.
gdiff -up '/usr/tmp/mp13568.d/old/Event-tcp-0.13/lib/Event/tcpsession.pm' 
'/usr/tmp/mp13568.d/new/Event-tcp-0.14/lib/Event/tcpsession.pm'
Index: ./lib/Event/tcpsession.pm
--- ./lib/Event/tcpsession.pm   Tue Feb  1 11:51:06 2000
+++ ./lib/Event/tcpsession.pm   Wed Feb 23 13:38:22 2000
@@ -10,7 +10,10 @@ use Event::Watcher qw(R W T);
 require Event::io;
 use base 'Event::io';
 use vars qw($VERSION);
-$VERSION = '0.13';
+$VERSION = '0.14';
+
+use constant DEBUG_SHOW_RPCS => 0;
+use constant DEBUG_BYTES => 0;
 
 use constant PROTOCOL_VERSION => 2;
 use constant RECONNECT_TM => 3;
@@ -82,7 +85,6 @@ sub fd {
            if (!defined $fd) {
                # This is a special case for regression testing.
                # Who knows, maybe it is generally useful too.
-               $o->stop;
                close $o->fd;
                $o->SUPER::fd(undef)
            } else {
@@ -156,7 +158,6 @@ sub disconnect {
        return 1;
     }
     $o->{status_cb}->($o, 'disconnect', $why);
-    $o->fd(undef);
     $o->connect_to_server;
 }
 
@@ -169,12 +170,12 @@ sub connect_to_server {
     if (!connect($fd, sockaddr_in($o->{port}, $o->{iaddr}))) {
        $o->{status_cb}->($o, 'connect', $!);
        $o->timeout(RECONNECT_TM);
-       $o->start;
        $o->cb([$o,'connect_to_server']);
+       $o->start;
        return
     }
-    $o->{status_cb}->($o, 'connect');
     $o->fd($fd);
+    $o->{status_cb}->($o, 'connect');
     $o->reconnected;
     1
 }
@@ -183,7 +184,6 @@ sub reconnected {
     my ($o) = @_;
 
     $o->timeout(undef);
-    $o->start;
     delete $o->{pend};
     delete $o->{peer_version};
     delete $o->{peer_api};
@@ -201,12 +201,13 @@ sub reconnected {
     # reload pending transactions
     # (anything not requiring acknowledgement gets/got ignored)
     while (my ($tx,$i) = each %{$o->{pend}}) {
-       warn "pend $i->[0]{name}";
+       # warn "pend $i->[0]{name}";
        append_obuf($o, $tx, $i->[2]);
     }
 
     $o->poll(R|W);
     $o->cb([$o,'service']);
+    $o->start;
 }
 
 #########################################################################
@@ -215,8 +216,6 @@ sub append_obuf {    # function call
     my ($o, $tx, $m) = @_;
     # length is inclusive
     my $mlen = length $m;
-#    confess "$mlen > 32000"
-#      if $mlen > 32000;
     $o->{obuf} .= pack(HEADER_FORMAT, 6+$mlen, $tx) . $m;
 
     $o->poll($o->poll | W);
@@ -249,12 +248,10 @@ sub unpack_args {
 sub service {
     my ($o, $e) = @_;
     my $w = $e->w;
-    if ($e->got & T) {
-       return if $o->disconnect("inactivity")
-    }
-    if (!defined $w->fd) {
-       return if $o->disconnect("fd closed")
-    }
+    return $o->disconnect("inactivity")
+       if $e->got & T;
+    return $o->disconnect("fd closed")
+       if !defined $w->fd;
     if ($e->got & R) {
        my $buf = $o->{ibuf};
        while (1) {
@@ -263,10 +260,13 @@ sub service {
            last if $!{EAGAIN};
            return $o->disconnect("sysread ret=$ret, $!");
        }
+       #warn "$$:R:".unpack('h*', $buf).":";
        # decode $buf
        if (!exists $o->{peer_version} and length $buf >= 2) {
            # check PROTOCOL_VERSION ...
            $o->{peer_version} = unpack 'n', substr($buf, 0, 2);
+           warn "$$:peer_version=$o->{peer_version}"
+               if DEBUG_SHOW_RPCS;
            $buf = substr $buf, 2;
            $o->disconnect("peer version mismatch $o->{peer_version} != ".
                           PROTOCOL_VERSION)
@@ -288,7 +288,10 @@ sub service {
                    next
                }
                # EVAL
-               $api->{code}->($o, unpack_args($api->{req}, $m));
+               my @args = unpack_args($api->{req}, $m);
+               warn "$$:Run($opid)(".join(', ', @args).")"
+                   if DEBUG_SHOW_RPCS;
+               $api->{code}->($o, @args);
 
            } elsif ($tx < RESERVED_IDS) {
                if ($tx == APIMAP_ID) {
@@ -304,7 +307,8 @@ sub service {
                            warn "got strange API spec: ".join(', ',@spec);
                        }
                    }
-                   # warn "got ".(0+@api)." APIs";
+                   warn "$$: ".(0+@api)." APIs"
+                       if DEBUG_SHOW_RPCS;
                    $o->{peer_api} = \@api;
                    my %peer_opname;
                    for (my $x=0; $x < @api; $x++) {
@@ -328,8 +332,13 @@ sub service {
                        next
                    }
                    # EVAL
-                   my @ret = $api->{code}->($o, unpack_args($api->{req}, $m));
-                   # what if exception?
+                   my @args = unpack_args($api->{req}, $m);
+                   warn "$$:Run($opid)(".join(", ", @args).") returning..."
+                       if DEBUG_SHOW_RPCS;
+                   my @ret = $api->{code}->($o, @args);
+                   # what if exception? XXX
+                   warn "$$:Return($opid)(".join(", ", @ret).")"
+                       if DEBUG_SHOW_RPCS;
                    my $packed_ret = pack_args($api->{reply}, @ret);
                    warn("'$api->{name}' returned (".join(', ',@ret).
                         " yet doesn't have a reply pack template")
@@ -345,7 +354,10 @@ sub service {
                    my ($api,$cb) = @$pend;
                    my $opid = unpack 'n', $m; # can double check opid XXX
                    # EVAL
-                   $cb->($o, unpack_args($api->{reply}, substr($m, 2)));
+                   my @args= unpack_args($api->{reply}, substr($m, 2));
+                   warn "$$:RunReply($opid)(".join(", ", @args).")"
+                       if DEBUG_SHOW_RPCS;
+                   $cb->($o, @args);
                }
            }
        }
@@ -360,6 +372,8 @@ sub service {
            return $o->disconnect("syswrite: $!")
        }
        if ($sent) {
+           warn "$$:W:".unpack('h*', substr($buf, 0, $sent)).":"
+               if DEBUG_BYTES;
            $buf = substr $buf, $sent;
            $o->{obuf} = $buf;
        }
@@ -378,7 +392,8 @@ sub rpc {
     my $o = shift;
     if (!defined $o->fd or !exists $o->{peer_opname}) {
        my @copy = @_;
-       #warn "delay $copy[0]";
+       #my $fileno = $o->fd? fileno($o->fd) : 'undef';
+       #warn "$$: delay $copy[0] ($fileno, $o->{peer_opname})";
        push @{$o->{delayed}}, \@copy;
        return;
     }
@@ -404,6 +419,8 @@ sub rpc {
        $save = $o->{pend}{$tx} = [$api, shift];
     }
 
+    warn "$$:Call($id)(".join(", ", @_).")"
+       if DEBUG_SHOW_RPCS;
     my $packed_args = pack_args($api->{req}, @_);
     croak("Attempt to invoke '$opname' with (".join(', ', @_).
          ") without pack template")
gdiff -up '/usr/tmp/mp13568.d/old/Event-tcp-0.13/t/join.t' 
'/usr/tmp/mp13568.d/new/Event-tcp-0.14/t/join.t'
Index: ./t/join.t
--- ./t/join.t  Tue Feb  1 11:49:10 2000
+++ ./t/join.t  Tue Feb  8 17:28:59 2000
@@ -2,10 +2,18 @@
 use strict;
 use Test;
 use Event qw(loop unloop);
+use Event::type qw(tcplisten tcpsession);
+
+my $debug=0;
+if ($debug) {
+    require NetServer::ProcessTop;
+}
 
 my $port = 7000 + int rand 2000;
 my $pid;
 if (($pid=fork) == 0) { # SERVER (child)
+    'NetServer::ProcessTop'->import()
+       if $debug;
     #sleep 1;
 
     my $finishing;
@@ -25,7 +33,7 @@ if (($pid=fork) == 0) { # SERVER (child)
 
     Event->tcplisten(port => $port, cb => sub {
                         my ($w, $sock) = @_;
-                        #warn "client on ".fileno($sock);
+                        # warn "client on ".fileno($sock);
                         my $o = Event->tcpsession(desc => 'server',
                                                   fd => $sock, api => $api);
                     });
@@ -38,6 +46,9 @@ if (($pid=fork) == 0) { # SERVER (child)
     exit loop();
 
 } else {  # CLIENT
+    'NetServer::ProcessTop'->import()
+       if $debug;
+    # $Event::DebugLevel = 4;
     my $Tests = 14;
     plan test => $Tests;
 
@@ -47,13 +58,16 @@ if (($pid=fork) == 0) { # SERVER (child)
 
     my $c = Event->tcpsession(desc => 'client', port => $port, api => $api,
                              cb => sub {
+                                 my ($w) = @_;
                                  $_[2] ||= 'ok';
-                                 # warn "$_[1]: $_[2]\n";
+                                 my $fn = $w->fd? fileno($w->fd) : 'undef';
+                                 # warn "Status: fd=$fn $_[1], $_[2]\n";
                              });
     ok ref $c, 'Event::tcpsession';
     
-    Event->timer(desc => 'break connection', after => 3, cb => sub {
+    Event->timer(desc => 'break connection', after => 4, cb => sub {
                     $c->fd(undef);  # (oops! :-)
+                    # $c->debug(1);
                     $c->now;        # otherwise wont notice
                     #warn "Broke connection in order to test recovery...\n";
                     $c->rpc('finishing');
@@ -65,9 +79,10 @@ if (($pid=fork) == 0) { # SERVER (child)
     Event->timer(interval => 1, cb => sub {
                     shift->w->cancel
                         if ++$tickled > 10;
+                    my $expect = $tickled;
                     $c->rpc('tickle', sub {
                                 my ($o,$got) = @_; 
-                                ok $got, 'he' x $tickled;
+                                ok $got, 'he' x $expect;
                             }, $tickled);
                 });
 
#### End of Patch data ####

#### ApplyPatch data follows ####
# Data version        : 1.0
# Date generated      : Wed Feb 23 13:44:19 2000
# Generated by        : makepatch 2.00 (2.0BETA)
# Recurse directories : Yes
# p 'ChangeLog' 1041 951331088 0100444
# p 'lib/Event/tcpsession.pm' 10829 951331102 0100444
# p 't/join.t' 1969 950048939 0100444
#### End of ApplyPatch data ####

#### End of Patch kit [created: Wed Feb 23 13:44:19 2000] ####
#### Checksum: 310 9516 25346 ####

-- 
"May the best description of competition prevail."
          via, but not speaking for Deutsche Bank

Reply via email to