Fwd: CPAN Upload: JPRIT/Event-0.68.tar.gz

[email protected] (Joshua N Pritikin)
Newsgroups perl.loop
Message-ID <[email protected]>
----- Forwarded message from [email protected] -----

Date: Tue, 15 Feb 2000 21:59:57 +0100
Subject: CPAN Upload: JPRIT/Event-0.68.tar.gz
From: [email protected]
To: [email protected],
    [email protected]

The uploaded file

    Event-0.68.tar.gz

has entered CPAN as

  file: $CPAN/authors/id/JPRIT/Event-0.68.tar.gz
  size: 66194 bytes
   md5: cc5484a0759ac94ae0f83fecde182ba1

No action is required on your part
Request entered by: JPRIT (Joshua N. Pritikin)
Request entered on: Tue, 15 Feb 2000 20:58:33 GMT
Request completed:  Tue, 15 Feb 2000 20:59:57 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-0.67 to update it to Event-0.68
# 
# 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.
# If you have a decent Bourne-type shell:
# STEP 2: Run the shell with this file as input.
# If you don't have such a shell, you may need to manually create
# the files as shown below.
# STEP 3: Run the 'patch' program with this file as input.
#
# These are the commands needed to create/delete files/directories:
#
touch 'demo/stdin.t'
chmod 0444 'demo/stdin.t'
#
# This command terminates the shell and need not be executed manually.
exit
#
#### End of Preamble ####

#### Patch data follows ####
gdiff -up '/usr/tmp/mp29431.d/old/Event-0.67/ChangeLog' '/usr/tmp/mp29431.d/new/Event-0.68/ChangeLog'
Index: ./ChangeLog
--- ./ChangeLog	Wed Feb  9 16:10:47 2000
+++ ./ChangeLog	Tue Feb 15 15:19:11 2000
@@ -1,3 +1,19 @@
+2000-02-15  Joshua Pritikin  <[email protected]>
+
+	* Release 0.68.
+
+2000-02-14  Joshua Pritikin  <[email protected]>
+
+	* More careful checking of
+ 	intervals. (suggested by [email protected])
+
+2000-02-10  Joshua Pritikin  <[email protected]>
+
+	* Fix yet another typemap bug. ([email protected])
+
+	* Make io default to poll=r; more stringent start test;
+ 	fix demo/stdin.t (suggested by [email protected])
+
 2000-02-09  Joshua Pritikin  <[email protected]>
 
 	* Release 0.67.  Hopefully this release will prove stable.
gdiff -up '/usr/tmp/mp29431.d/old/Event-0.67/Event.xs' '/usr/tmp/mp29431.d/new/Event-0.68/Event.xs'
Index: ./Event.xs
--- ./Event.xs	Mon Feb  7 15:16:44 2000
+++ ./Event.xs	Tue Feb 15 15:19:38 2000
@@ -23,6 +23,23 @@ extern "C" {
 #  define whichsig Perl_whichsig   /* ? */
 #endif
 
+/* lexical warnings -- waiting for appropriate magic from
+   [email protected] */
+#if 0
+static void Event_warn(const char* pat, ...) {
+    dTHX;
+    va_list args;
+    va_start(args, pat);
+    if (!ckWARN_d(WARN_ALL))
+	return;
+    Perl_vwarner(aTHX_ WARN_ALL, pat, &args);
+    va_end(args);
+}
+
+#  undef warn
+#  define warn Event_warn
+#endif
+
 #ifdef croak
 #  undef croak
 #endif
gdiff -up '/usr/tmp/mp29431.d/old/Event-0.67/MANIFEST' '/usr/tmp/mp29431.d/new/Event-0.68/MANIFEST'
Index: ./MANIFEST
--- ./MANIFEST	Wed Feb  9 08:51:53 2000
+++ ./MANIFEST	Thu Feb 10 09:00:52 2000
@@ -22,12 +22,13 @@ c/typemap.c
 c/unix_io.c
 c/var.c
 c/watcher.c
+demo/group.t
 demo/in.pl
 demo/inactivity.t
-demo/group.t
 demo/process.pm
 demo/readline.t
 demo/spin_io.t
+demo/stdin.t
 demo/variable_repeater.t
 lib/Event.pm
 lib/Event.pod
gdiff -up '/usr/tmp/mp29431.d/old/Event-0.67/TODO' '/usr/tmp/mp29431.d/new/Event-0.68/TODO'
Index: ./TODO
--- ./TODO	Tue Feb  8 16:57:12 2000
+++ ./TODO	Tue Feb 15 15:09:02 2000
@@ -1,10 +1,12 @@
+finish up lexical warnings
+
 deprecate inactivity completely?
 
-add timeout for var watchers?
+omitting parked=>1 should be a warning, not an error
 
-increase the number of priority levels?
-  ASYNC    0    1    2    3    4    5    6    7    8    9   IDLE
-                         HIGH           NORM
+attribute set methods should return the new value
+
+add timeout for var watchers?
 
 find owner for Win32 port
 
@@ -12,6 +14,14 @@ documentation
   how to design new event types (in perl)
   how to design new event types (in C)??
 
[email protected] signal discussion:
+  The API rsignal overrides the current signal handler.  If the signal
+  watcher is cancelled (or otherwise disabled) then rsignal is reset to
+  SIG_DFL.  Maybe the original handler
+  should be restored.  On the other hand, assignment to %SIG will mess
+  up Event watchers so maybe Event should refuse to watch a signal if a
+  handler is already installed.
+
 optimization
   update io event-mask without invalidating cache
   determine IntervalEpsilon dynamically & make available from perl
@@ -19,22 +29,18 @@ optimization
     queue events from both sides?
   try to hoist system calls from the inner loop
 
+there seems to be some sort of bug in the shutdown phase
+  Attempt to free unreferenced scalar during global destruction.
+  Use of uninitialized value during global destruction.
+  Explicit blessing to '' (assuming package main) during global
+  destruction.
+
 rethink
   pe_check_recovery & ENTER/LEAVE points
 
[email protected] signal discussion:
-  The API rsignal overrides the current signal handler.  If the signal
-  watcher is cancelled (or otherwise disabled) then rsignal is reset to
-  SIG_DFL.  Maybe the original handler
-  should be restored.  On the other hand, assignment to %SIG will mess
-  up Event watchers so maybe Event should refuse to watch a signal if a
-  handler is already installed.
-
-there seems to be some sort of bug in the shutdown phase
-> Attempt to free unreferenced scalar during global destruction.
-> Use of uninitialized value during global destruction.
-> Explicit blessing to '' (assuming package main) during global
-> destruction.
+increase the number of priority levels?
+  ASYNC    0    1    2    3    4    5    6    7    8    9   IDLE
+                         HIGH           NORM
 
 loop
   StarvePrio?
gdiff -up '/usr/tmp/mp29431.d/old/Event-0.67/c/group.c' '/usr/tmp/mp29431.d/new/Event-0.68/c/group.c'
Index: ./c/group.c
--- ./c/group.c	Wed Feb  9 12:29:57 2000
+++ ./c/group.c	Tue Feb 15 15:17:22 2000
@@ -35,7 +35,7 @@ static char *pe_group_start(pe_watcher *
 
     if (!ev->callback)
 	return "without callback";
-    if (!sv_2interval(gp->timeout, &timeout))
+    if (!sv_2interval("group", gp->timeout, &timeout))
 	return "repeating group has no timeout";
 
     gp->since = WaHARD(ev)? gp->tm.at : NVtime();
@@ -62,7 +62,7 @@ static void pe_group_alarm(pe_watcher *w
 	}
     }
 
-    if (!sv_2interval(gp->timeout, &timeout))
+    if (!sv_2interval("group", gp->timeout, &timeout))
 	croak("Event: can't extract timeout"); /* impossible */
 
     remaining = gp->since + timeout - now;
@@ -125,6 +125,7 @@ WKEYMETH(_group_timeout) {
 	SV *old = gp->timeout;
 	gp->timeout = SvREFCNT_inc(nval);
 	SvREFCNT_dec(old);
+	VERIFYINTERVAL("group", gp->timeout);
 	/* recalc expiration XXX */
     }
 }
gdiff -up '/usr/tmp/mp29431.d/old/Event-0.67/c/idle.c' '/usr/tmp/mp29431.d/new/Event-0.68/c/idle.c'
Index: ./c/idle.c
--- ./c/idle.c	Mon Feb  7 10:15:08 2000
+++ ./c/idle.c	Tue Feb 15 15:17:55 2000
@@ -36,7 +36,7 @@ static char *pe_idle_start(pe_watcher *e
 	WaCBTIME_off(ev);
     if (!repeating) ev->cbtime = NVtime();
     now = WaHARD(ev)? ev->cbtime : NVtime();
-    if (sv_2interval(ip->min_interval, &min)) {
+    if (sv_2interval("min", ip->min_interval, &min)) {
 	ip->tm.at = min + now;
 	pe_timeable_start(&ip->tm);
 	D_IDLE(warn("min %.2f setup '%s'\n", min, SvPV(ev->desc,na)));
@@ -44,7 +44,7 @@ static char *pe_idle_start(pe_watcher *e
     else {
 	PE_RING_UNSHIFT(&ip->iring, &Idle);
 	D_IDLE(warn("idle '%s'\n", SvPV(ev->desc,na)));
-	if (sv_2interval(ip->max_interval, &max)) {
+	if (sv_2interval("max", ip->max_interval, &max)) {
 	    D_IDLE(warn("max %.2f setup '%s'\n", max, SvPV(ev->desc,na)));
 	    ip->tm.at = max + now;
 	    pe_timeable_start(&ip->tm);
@@ -58,7 +58,7 @@ static void pe_idle_alarm(pe_watcher *wa
     double min,max,left;
     pe_idle *ip = (pe_idle*) wa;
     pe_timeable_stop(&ip->tm);
-    if (sv_2interval(ip->min_interval, &min)) {
+    if (sv_2interval("min", ip->min_interval, &min)) {
 	left = wa->cbtime + min - now;
 	if (left > IntervalEpsilon) {
 	    ++TimeoutTooEarly;
@@ -72,7 +72,7 @@ static void pe_idle_alarm(pe_watcher *wa
 	PE_RING_UNSHIFT(&ip->iring, &Idle);
 	D_IDLE(warn("idle '%s'\n", SvPV(wa->desc,na)));
     }
-    if (sv_2interval(ip->max_interval, &max)) {
+    if (sv_2interval("max", ip->max_interval, &max)) {
 	left = wa->cbtime + max - now;
 	if (left < IntervalEpsilon) {
 	    pe_event *ev;
@@ -108,6 +108,7 @@ WKEYMETH(_idle_max_interval) {
 	SV *old = ip->max_interval;
 	ip->max_interval = SvREFCNT_inc(nval);
 	if (old) SvREFCNT_dec(old);
+	VERIFYINTERVAL("max", ip->max_interval);
     }
 }
 
@@ -121,6 +122,7 @@ WKEYMETH(_idle_min_interval) {
 	SV *old = ip->min_interval;
 	ip->min_interval = SvREFCNT_inc(nval);
 	if (old) SvREFCNT_dec(old);
+	VERIFYINTERVAL("min", ip->min_interval);
     }
 }
 
gdiff -up '/usr/tmp/mp29431.d/old/Event-0.67/c/io.c' '/usr/tmp/mp29431.d/new/Event-0.68/c/io.c'
Index: ./c/io.c
--- ./c/io.c	Tue Feb  8 17:20:49 2000
+++ ./c/io.c	Thu Feb 10 08:27:22 2000
@@ -14,7 +14,7 @@ static pe_watcher *pe_io_allocate(HV *st
     ev->fd = -1;
     ev->timeout = 0;
     ev->handle = &PL_sv_undef;
-    ev->poll = 0;
+    ev->poll = PE_R;
     ev->tm_callback = 0;
     ev->tm_ext_data = 0;
     WaINVOKE1_off(ev);
@@ -43,7 +43,7 @@ static char *pe_io_start(pe_watcher *_ev
        assigning anything to the 'handle'.  This should be more
        officially supported but maybe it is too unix specific. */
 
-    if (ev->fd >= 0) {
+    if (ev->fd >= 0 && (ev->poll & ~PE_T)) {
 	if (!ev->base.callback)
 	    return "without io callback";
 	PE_RING_UNSHIFT(&ev->ioring, &IOWatch);
@@ -132,7 +132,7 @@ WKEYMETH(_io_poll) {
 	XPUSHs(sv_2mortal(events_mask_2sv(io->poll)));
 	PUTBACK;
     } else {
-	int nev = sv_2events_mask(nval, PE_R|PE_W|PE_E|PE_T);
+	int nev = sv_2events_mask(nval, PE_R|PE_W|PE_E);
 	if (io->timeout) nev |=  PE_T;
 	else             nev &= ~PE_T;
 	if (io->poll != nev) {
gdiff -up '/usr/tmp/mp29431.d/old/Event-0.67/c/timer.c' '/usr/tmp/mp29431.d/new/Event-0.68/c/timer.c'
Index: ./c/timer.c
--- ./c/timer.c	Tue Feb  8 17:22:15 2000
+++ ./c/timer.c	Tue Feb 15 15:16:56 2000
@@ -29,7 +29,7 @@ static char *pe_timer_start(pe_watcher *
 	   the appropriate time increment. */
 	double interval;
 
-	if (!sv_2interval(tm->interval, &interval))
+	if (!sv_2interval("timer", tm->interval, &interval))
 	    return "repeating timer has no interval";
 
 	tm->tm.at = interval + (WaHARD(ev)? tm->tm.at : NVtime());
@@ -74,6 +74,7 @@ WKEYMETH(_timer_interval) {
 	SV *old = tp->interval;
 	tp->interval = SvREFCNT_inc(nval);
 	SvREFCNT_dec(old);
+	VERIFYINTERVAL("timer", tp->interval);
 	/* recalc expiration XXX */
     }
 }
gdiff -up '/usr/tmp/mp29431.d/old/Event-0.67/c/typemap.c' '/usr/tmp/mp29431.d/new/Event-0.68/c/typemap.c'
Index: ./c/typemap.c
--- ./c/typemap.c	Wed Feb  9 08:47:22 2000
+++ ./c/typemap.c	Tue Feb 15 15:18:40 2000
@@ -55,6 +55,8 @@ static void* sv_2watcher(SV *sv) {
     sv = SvRV(sv);
     if (SvTYPE(sv) < SVt_PVMG)
 	croak("sv_2watcher: not a watcher");
+    if (!SvOBJECT(sv))
+	croak("sv_2watcher: not an object");
     mg = mg_find(sv, '~');
     if (mg) {
 	if (mg->mg_private != MG_PRIVATE_CODE) {
@@ -62,8 +64,7 @@ static void* sv_2watcher(SV *sv) {
 	}
 	return (void*) mg->mg_obj;
     }
-    croak("Attempt to use destroyed object (RV=0x%x %s=0x%x)",
-	  origsv, HvNAME(SvSTASH(sv)), sv);
+    croak("sv_2watcher: can't decode SV=0x%x", origsv);
     return 0;
 }
 
@@ -102,7 +103,10 @@ static void *sv_2event(SV *sv) {
 
 /***************************************************************/
 
-static int sv_2interval(SV *in, double *out) {
+#define VERIFYINTERVAL(name, f) \
+ STMT_START { double ign; sv_2interval(name, f, &ign); } STMT_END
+
+static int sv_2interval(char *label, SV *in, double *out) {
     SV *sv = in;
     if (!sv) return 0;
     if (SvGMAGICAL(sv))
@@ -110,7 +114,10 @@ static int sv_2interval(SV *in, double *
     if (!SvOK(sv)) return 0;
     if (SvROK(sv))
 	sv = SvRV(sv);
-    if (SvNOK(sv)) {
+    if (!SvOK(sv)) {
+	warn("Event: %s interval undef", label);
+	*out = 0;
+    } else if (SvNOK(sv)) {
 	*out = SvNVX(sv);
     } else if (SvIOK(sv)) {
 	*out = SvIVX(sv);
@@ -118,11 +125,13 @@ static int sv_2interval(SV *in, double *
 	*out = SvNV(sv);
     } else {
 	sv_dump(in);
-	croak("Interval must be a number of reference to a number");
+	croak("Event: %s interval must be a number or reference to a number",
+	      label);
 	return 0;
     }
     if (*out < 0) {
-	warn("Event: negative timeout (%.2f) clipped to zero", *out);
+	warn("Event: %s has negative timeout %.2f (clipped to zero)",
+	     label, *out);
 	*out = 0;
     }
     return 1;
gdiff -up /dev/null '/usr/tmp/mp29431.d/new/Event-0.68/demo/stdin.t'
Index: ./demo/stdin.t
--- ./demo/stdin.t	Wed Dec 31 19:00:00 1969
+++ ./demo/stdin.t	Thu Feb 10 08:08:00 2000
@@ -0,0 +1,7 @@
+use Event;
+
+$w=Event->io(fd=>\*STDIN, cb=>sub {<STDIN>; warn "CALLED!\n";});
+
+print "io default poll attribute:", $w->poll, "\n";
+
+Event::loop();
gdiff -up '/usr/tmp/mp29431.d/old/Event-0.67/lib/Event.pm' '/usr/tmp/mp29431.d/new/Event-0.68/lib/Event.pm'
Index: ./lib/Event.pm
--- ./lib/Event.pm	Wed Feb  9 16:11:04 2000
+++ ./lib/Event.pm	Tue Feb 15 15:09:11 2000
@@ -13,7 +13,7 @@ use Carp;
 eval { require Carp::Heavy; };  # work around perl_call_pv bug XXX
 use vars qw($VERSION @EXPORT_OK
 	    $API $DebugLevel $Eval $DIED $Now);
-$VERSION = '0.67';
+$VERSION = '0.68';
 
 # If we inherit DynaLoader then we inherit AutoLoader; Bletch!
 require DynaLoader;
gdiff -up '/usr/tmp/mp29431.d/old/Event-0.67/ppport.h' '/usr/tmp/mp29431.d/new/Event-0.68/ppport.h'
Index: ./ppport.h
--- ./ppport.h	Wed Dec 22 17:00:07 1999
+++ ./ppport.h	Mon Feb 14 09:02:47 2000
@@ -187,6 +187,7 @@ __DATA__
 #ifndef dTHX
 #  define dTHX dTHR
 #  define pTHX_
+#  define aTHX_
 #endif
 
 #ifndef boolSV
gdiff -up '/usr/tmp/mp29431.d/old/Event-0.67/t/callback.t' '/usr/tmp/mp29431.d/new/Event-0.68/t/callback.t'
Index: ./t/callback.t
--- ./t/callback.t	Tue Feb  8 17:46:38 2000
+++ ./t/callback.t	Tue Feb 15 15:49:26 2000
@@ -1,7 +1,7 @@
 #!./perl -w
 
 use strict;
-use Test; plan tests => 3;
+use Test; plan tests => 5;
 use Event 0.65;
 
 my $invoked_method=0;
@@ -17,11 +17,19 @@ Event->timer(after => 0, cb => [$main, '
     local $SIG{__WARN__} = sub {
 	ok $_[0], '/nomethod/';
     };
-    Event->timer(after => 0, cb => [$main, 'nomethod'])->cancel;
+    Event->timer(desc => 'nomethod', after => 0, cb => [$main, 'nomethod']);
 }
 
 eval { Event->timer(after => 0, cb => ['main']); };
 ok $@, '/Callback/';
 
-Event::loop();
+{
+    local $Event::DIED = sub {
+	my ($run,$err) = @_;
+	ok $run->w->desc, 'nomethod';
+	ok $err, '/object method/';
+    };
+    Event::loop();
+}
+
 ok $invoked_method, 3;
gdiff -up '/usr/tmp/mp29431.d/old/Event-0.67/t/io.t' '/usr/tmp/mp29431.d/new/Event-0.68/t/io.t'
Index: ./t/io.t
--- ./t/io.t	Fri Feb  4 08:15:51 2000
+++ ./t/io.t	Thu Feb 10 08:38:04 2000
@@ -8,12 +8,18 @@ BEGIN {
     }
 }
 
-use Test; plan tests => 6;
+use Test; plan tests => 8;
 use Event qw(loop unloop);
 use Event::Watcher qw(R W);
 use Symbol;
 
 #$Event::DebugLevel = 3;
+
+eval { Event->io };
+ok $@, "/nothing to watch/";
+
+eval { Event->io(fd => \*STDIN, cb => \&die, poll => 0) };
+ok $@, "/nothing to watch/";
 
 my $noticed_bogus_fd=0;
 my $bogus_timeout=0;
#### End of Patch data ####

#### ApplyPatch data follows ####
# Data version        : 1.0
# Date generated      : Tue Feb 15 15:57:49 2000
# Generated by        : makepatch 2.00 (2.0BETA)
# Recurse directories : Yes
# p 'ChangeLog' 22650 950645951 0100444
# p 'Event.xs' 18104 950645978 0100444
# p 'MANIFEST' 906 950191252 0100444
# p 'TODO' 1620 950645342 0100444
# p 'c/group.c' 3709 950645842 0100444
# p 'c/idle.c' 3573 950645875 0100444
# p 'c/io.c' 5369 950189242 0100444
# p 'c/timer.c' 2173 950645816 0100444
# p 'c/typemap.c' 4161 950645920 0100444
# c 'demo/stdin.t' 0 950188080 0100444
# p 'lib/Event.pm' 4254 950645351 0100444
# p 'ppport.h' 7852 950536967 0100444
# p 't/callback.t' 543 950647766 0100444
# p 't/io.t' 1650 950189884 0100444
#### End of ApplyPatch data ####

#### End of Patch kit [created: Tue Feb 15 15:57:49 2000] ####
#### Checksum: 490 16017 42654 ####

-- 
"Never ascribe to malice that which can be explained by stupidity."
                            via, but not speaking for Deutsche Bank
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.