sem_wait: Setting a range for time checking.
PATCH 1/1 sem_wait: Setting a range for time checking.
Hi,
According to POSIX, many historical implementations (including Version 7 and System V) allow an alarm to occur up to a second early. Other implementations allow alarms up to half a second or one clock tick early or do not allow them to occur early at all. That means, the SIGALRM sent by alarm() could arrive a little earlier. So, even if sem_wait() is blocked, test could still fail.
Setting a range for time checking would be better. When sem_wait() is block and then be interrupted by SIGALRM, if the time is in this range, test is passed.
--- .../conformance/interfaces/sem_wait/13-1.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-)
(quoted diff) +0 -0
a/testcases/open_posix_testsuite/conformance/interfaces/sem_wait/13-1.c b/testcases/open_posix_testsuite/conformance/interfaces/sem_wait/13-1.c index 7bf547c..f30bba5 100644
testcases/open_posix_testsuite/conformance/interfaces/sem_wait/13-1.c +0 -0
@@ -83,6 +83,8 @@/******************************************************************************/ /*************************** Test case
***********************************/
/******************************************************************************/
+#define RANGE 1000000 /* 1000000 nsec */
+
sem_t sem;
void handler(int sig)
@@ -163,7 +165,7 @@ int main(int argc, char * argv[])
}
if (((ts_fin.tv_sec - ts_ref.tv_sec) * 1000000000) +
- (ts_fin.tv_nsec - ts_ref.tv_nsec) < 1000000000)
+ (ts_fin.tv_nsec - ts_ref.tv_nsec) < (1000000000 - RANGE))
{
output("Ts: %d.%9.9d -> %d.%9.9d\n", ts_ref.tv_sec,
ts_ref.tv_nsec, ts_fin.tv_sec, ts_fin.tv_nsec);
FAILED("The sem_wait call did not block");@@ -185,4 +187,4 @@ int main(int argc, char * argv[])
#endif
PASSED;
-}
\ No newline at end of file
+}
Signature · 18 lines
1.7.1 -- Best Regards, Tang chen -------------------------------------------------- ------------------------------------------------------------------------------ Colocation vs. Managed Hosting A question and answer guide to determining the best fit for your organization - today and in the future. http://p.sf.net/sfu/internap-sfd2d _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
Hi!
Quoted 9 lines
According to POSIX, many historical implementations (including Version 7 and System V) allow an alarm to occur up to a second early. Other implementations allow alarms up to half a second or one clock tick early or do not allow them to occur early at all. That means, the SIGALRM sent by
alarm()could arrive a little earlier. So, even ifsem_wait()is blocked, test could still fail.
Setting a range for time checking would be better. Whensem_wait()is block and then be interrupted by SIGALRM, if the time is in this range, test is passed.
Out of curiosity, what system is this? The signal seems to arrives after more than 1 second on all linux boxes that I have.
Signature · 13 lines
Cyril Hrubis [email protected] ------------------------------------------------------------------------------ Enable your software for Intel(R) Active Management Technology to meet the growing manageability and security demands of your customers. Businesses are taking advantage of Intel(R) vPro (TM) technology - will your software be a part of the solution? Download the Intel(R) Manageability Checker today! http://p.sf.net/sfu/intel-dev2devmar _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
A message that is not in the archive (sent off-list or not yet received): [email protected]
Hi!
Quoted 18 lines
Quoted 11 lines
Quoted 9 lines
According to POSIX, many historical implementations (including Version 7 and System V) allow an alarm to occur up to a second early. Other implementations allow alarms up to half a second or one clock tick early or do not allow them to occur early at all. That means, the SIGALRM sent by
alarm()could arrive a little earlier. So, even ifsem_wait()is blocked, test could still fail.
Setting a range for time checking would be better. Whensem_wait()is block and then be interrupted by SIGALRM, if the time is in this range, test is passed.Out of curiosity, what system is this? The signal seems to arrives after more than 1 second on all linux boxes that I have.
My box is like the following:
OS: RHEL5.5 x86-64.
Memory: 2GB
CPU: Intel(R) Xeon(TM) CPU 3.00GHz (4 CPUs)
Quoted 5 lines
Sometimes it worked normally, but sometimes I got the following messages:
Ts: 1300437153.432960442 -> 1300437154.432457949 Test ../../../conformance/interfaces/sem_wait/13-1.c
FAILED: Thesem_waitcall did not block
Okay, I've did a little different fix. Now the alarm is set to wait for two seconds and we expects it to last at least one.
Signature · 12 lines
Cyril Hrubis [email protected] ------------------------------------------------------------------------------ Create and publish websites with WebMatrix Use the most popular FREE web apps or write code yourself; WebMatrix provides all the features you need to develop and publish your website. http://p.sf.net/sfu/ms-webmatrix-sf _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list