diff options
author | wiz <wiz@pkgsrc.org> | 2001-02-06 18:13:51 +0000 |
---|---|---|
committer | wiz <wiz@pkgsrc.org> | 2001-02-06 18:13:51 +0000 |
commit | aa9c161a9f2ea40a36d3f9e436dcc368e1a7e771 (patch) | |
tree | 901b20ecf1f8401e1177e1643ecf1bf94cf9208e /lang/snobol/patches/patch-ab | |
parent | f0bcd612c45abac155873a0056525897e920b664 (diff) | |
download | pkgsrc-aa9c161a9f2ea40a36d3f9e436dcc368e1a7e771.tar.gz |
Update the package to 0.99.4nb1. All changes by John Refling.
Closes pkg/10535. Changes are:
o Bypassed the hard-to-reproduce build failure caused by
getrusage() returning decreasing microsecond times. Did
this by wrapping the getrusage() function so that it never
returns a smaller value for microseconds than the previous
time it was called, if called within the same second.
Perhaps this should be done to getrusage() internally, until
fixed the proper way. See PR bin/10201. --- refling.
o Added a tutorial and a message about it. --- refling.
Diffstat (limited to 'lang/snobol/patches/patch-ab')
-rw-r--r-- | lang/snobol/patches/patch-ab | 78 |
1 files changed, 60 insertions, 18 deletions
diff --git a/lang/snobol/patches/patch-ab b/lang/snobol/patches/patch-ab index 0008bddc98b..3b0e61a5a3a 100644 --- a/lang/snobol/patches/patch-ab +++ b/lang/snobol/patches/patch-ab @@ -1,21 +1,63 @@ -$NetBSD: patch-ab,v 1.1.1.1 2000/03/11 06:01:56 wiz Exp $ +$NetBSD: patch-ab,v 1.2 2001/02/06 18:13:52 wiz Exp $ ---- ./Makefile2.m4.orig Thu Aug 7 07:34:47 1997 -+++ ./Makefile2.m4 Sat Mar 11 04:24:21 2000 -@@ -48,13 +48,13 @@ - SNOLIB_FILE=snolib.a +--- ./lib/bsd/mstime.c.orig Wed Oct 30 12:39:40 1996 ++++ ./lib/bsd/mstime.c Thu Jan 25 07:08:41 2001 +@@ -12,11 +12,56 @@ + * (and you don't need to know HZ) + */ - # directory name for default SNOLIB (used by -INCLUDE and LOAD()) --SNOLIB_DIR=/usr/local/lib/snobol4 -+SNOLIB_DIR=${PREFIX}/lib/snobol4 ++/* Added by refling@comet.lbl.gov to compensate for the fact that the usec ++ value can go backwards within the same sec on NetBSD. Problem has been ++ noted on sparc and i386. It really only appears in the test routine ++ where times are differenced, causing negative numbers to be generated. ++ This WILL cause the build to fail consistently on my sparc LX, but not ++ on the i386, even though the problem can be demonstrated there. See ++ NetBSD PR bin/10201. ++ ++ The simple solution here is to have a persistent variable, and if the ++ usec value returned from getrusage() is LESS than the previous one ++ (stored in the persistent variable), use the previous one. This is ++ only when the second counter is the same between the previous and ++ current usec. This will make time stand still, but at least it ++ won't go backwards! ++ ++ This could also be added to the definition of the NetBSD getrusage() ++ function to prevent it from returning bogus values in the first place, ++ if the real cause of the problem can't be tracked down. ++ ++ Note that the patch to snobol4 (in this file) will not need to be ++ changed even if/when getrusage() is ultimately fixed. The only expense ++ is a few extra numerical comparisons. Typically, one doesn't take time ++ measurements too often. */ ++ ++static long prev_sec = 0; ++static long prev_usec = 0; ++ + int_t + mstime() { + struct rusage ru; ++ long cur_usec, cur_sec; - # default name for installed binary --BINDEST=/usr/local/bin/snobol4 -+BINDEST=${PREFIX}/bin/snobol4 - - # default name for installed man page --MANDEST=/usr/local/man/man1/snobol4.1 -+MANDEST=${PREFIX}/man/man1/snobol4.1 - - ######## - # default lib source files + getrusage( RUSAGE_SELF, &ru ); /* XXX check return? */ +- return(ru.ru_utime.tv_sec * 1000 + +- ru.ru_utime.tv_usec / 1000); ++ cur_usec = ru.ru_utime.tv_usec; ++ cur_sec = ru.ru_utime.tv_sec; ++ if (prev_usec > cur_usec && prev_sec == cur_sec) { ++ cur_usec = prev_usec; ++// prev_sec = cur_sec; /* this is redundant in this case, since == */ ++// prev_usec = cur_usec; /* this is also redundant */ ++// system("echo a >> /tmp/caught_problem"); ++ } ++ else { ++ prev_sec = cur_sec; ++ prev_usec = cur_usec; ++ } ++ return(cur_sec * 1000 + ++ cur_usec / 1000); ++ ++// this is what it was.... ++// getrusage( RUSAGE_SELF, &ru ); /* XXX check return? */ ++// return(ru.ru_utime.tv_sec * 1000 + ++// ru.ru_utime.tv_usec / 1000); + } |