On Tue, 25 Mar 2003, Mike Stok wrote:

> On Tue, 25 Mar 2003, Robert Spier wrote:
> 
> > > So it looks like the alarm isn't killing the eval before the while 
> > > terminates.
> > 
> > Weird.
> > 
> > I wonder if this will happen in pure C code that does a similar busy
> > wait.  It may have to do with delayed signal delivery or such at the
> > UML level.
> 
> That sounds like a good avenuye of exploration; I'll look into it and 
> report back.

It *seems* that there is an interaction between lots of system calls in 
UML and a delay in the delivery of a SIGALRM.  See 
http://sourceforge.net/mailarchive/forum.php?thread_id=1880003&forum_id=3647 
for the discussion so far.

I will be smoketesting again from today using a patchlist containing a 
file with this patch to skip the first 2 alarm tests if I'm running under 
UML:

diff -ru perl.dist/t/op/alarm.t perl/t/op/alarm.t
--- perl.dist/t/op/alarm.t      2003-01-23 09:24:25.000000000 -0500
+++ perl/t/op/alarm.t   2003-03-27 09:53:21.000000000 -0500
@@ -16,21 +16,33 @@
 plan tests => 4;
 my $Perl = which_perl();
 
-my $start_time = time;
-eval {
-    local $SIG{ALRM} = sub { die "ALARM!\n" };
-    alarm 3;
-
-    # perlfunc recommends against using sleep in combination with alarm.
-    1 while (time - $start_time < 6);
-};
-alarm 0;
-my $diff = time - $start_time;
+my $usingUML;
 
-# alarm time might be one second less than you said.
-is( $@, "ALARM!\n",             'alarm w/$SIG{ALRM} vs inf loop' );
-ok( abs($diff - 3) <= 1,   "   right time" );
+if ($^O eq 'linux') {
+    local *FH;
+    if (open (FH, '/proc/cpuinfo')) {
+        $usingUML = grep /^model name\s*: UML/, <FH>;
+        close FH;
+    }
+}
 
+SKIP: {
+    skip "Running under UML", 2 if $usingUML;
+    my $start_time = time;
+    eval {
+        local $SIG{ALRM} = sub { die "ALARM!\n" };
+        alarm 3;
+
+        # perlfunc recommends against using sleep in combination with alarm.
+        1 while (time - $start_time < 6);
+    };
+    alarm 0;
+    my $diff = time - $start_time;
+
+    # alarm time might be one second less than you said.
+    is( $@, "ALARM!\n",             'alarm w/$SIG{ALRM} vs inf loop' );
+    ok( abs($diff - 3) <= 1,   "   right time" );
+}
 
 my $start_time = time;
 eval {

This will at least let me test everything exept alarm for 5.8.1 to be 
under rh8.

Would this generate meaningful test results?

Mike

-- 
[EMAIL PROTECTED]                    |           The "`Stok' disclaimers" apply.
http://www.stok.co.uk/~mike/       | GPG PGP Key      1024D/059913DA 
[EMAIL PROTECTED]                  | Fingerprint      0570 71CD 6790 7C28 3D60
http://www.exegenix.com/           |                  75D2 9EC4 C1C0 0599 13DA

Reply via email to