Module Name:    src
Committed By:   jruoho
Date:           Sat Sep 17 18:52:21 UTC 2011

Modified Files:
        src/tests/lib/libc/sys: Makefile t_timer_create.c

Log Message:
Simplify.


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/tests/lib/libc/sys/Makefile
cvs rdiff -u -r1.1 -r1.2 src/tests/lib/libc/sys/t_timer_create.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/lib/libc/sys/Makefile
diff -u src/tests/lib/libc/sys/Makefile:1.7 src/tests/lib/libc/sys/Makefile:1.8
--- src/tests/lib/libc/sys/Makefile:1.7	Mon Jul 18 23:16:11 2011
+++ src/tests/lib/libc/sys/Makefile	Sat Sep 17 18:52:21 2011
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.7 2011/07/18 23:16:11 jym Exp $
+# $NetBSD: Makefile,v 1.8 2011/09/17 18:52:21 jruoho Exp $
 
 MKMAN=	no
 
@@ -32,6 +32,7 @@
 TESTS_C+=		t_msync
 TESTS_C+=		t_nanosleep
 TESTS_C+=		t_poll
+TESTS_C+=		t_ptrace
 TESTS_C+=		t_revoke
 TESTS_C+=		t_select
 TESTS_C+=		t_setrlimit
@@ -46,7 +47,6 @@
 SRCS.t_mprotect=	t_mprotect.c ${SRCS_EXEC_PROT}
 
 LDADD.t_getpid+=        -lpthread
-LDADD.t_timer_create+=  -lpthread
 
 WARNS=			4
 

Index: src/tests/lib/libc/sys/t_timer_create.c
diff -u src/tests/lib/libc/sys/t_timer_create.c:1.1 src/tests/lib/libc/sys/t_timer_create.c:1.2
--- src/tests/lib/libc/sys/t_timer_create.c:1.1	Thu Jul  7 06:57:54 2011
+++ src/tests/lib/libc/sys/t_timer_create.c	Sat Sep 17 18:52:21 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_timer_create.c,v 1.1 2011/07/07 06:57:54 jruoho Exp $ */
+/*	$NetBSD: t_timer_create.c,v 1.2 2011/09/17 18:52:21 jruoho Exp $ */
 
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -26,320 +26,148 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include <atf-c.h>
 #include <errno.h>
-#include <pthread.h>
+#include <stdio.h>
 #include <signal.h>
 #include <string.h>
 #include <time.h>
 #include <unistd.h>
 
-#include <atf-c.h>
-
-#include "../../../h_macros.h"
-
-static void	timer_signal_create(clockid_t, int);
-static void	timer_signal_handler(int, siginfo_t *, void *);
-static int	timer_wait(time_t);
-
-#if 0
-/*
- * XXX: SIGEV_THREAD is not yet supported.
- */
-static void	timer_thread_create(clockid_t);
-static void	timer_thread_handler(sigval_t);
-#endif
-
 static timer_t t;
-static bool error;
-static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
-static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
-
-ATF_TC(timer_create_bogus);
-ATF_TC_HEAD(timer_create_bogus, tc)
-{
-
-	/* Cf. PR lib/42434. */
-	atf_tc_set_md_var(tc, "descr",
-	    "Checks timer_create(2)'s error checking");
-}
-
-ATF_TC_BODY(timer_create_bogus, tc)
-{
-	struct sigevent evt;
-
-	(void)memset(&evt, 0, sizeof(struct sigevent));
-
-	evt.sigev_signo = -1;
-	evt.sigev_notify = SIGEV_SIGNAL;
-
-	if (timer_create(CLOCK_REALTIME, &evt, &t) == 0)
-		goto fail;
-
-	evt.sigev_signo = SIGUSR1;
-	evt.sigev_notify = SIGEV_THREAD + 100;
-
-	if (timer_create(CLOCK_REALTIME, &evt, &t) == 0)
-		goto fail;
-
-	evt.sigev_signo = SIGUSR1;
-	evt.sigev_value.sival_int = 0;
-	evt.sigev_notify = SIGEV_SIGNAL;
+static bool fail = true;
 
-	if (timer_create(CLOCK_REALTIME + 100, &evt, &t) == 0)
-		goto fail;
-
-	t = 0;
-
-	return;
-
-fail:
-	atf_tc_fail("timer_create() successful with bogus values");
-}
-
-ATF_TC(timer_create_signal_realtime);
-ATF_TC_HEAD(timer_create_signal_realtime, tc)
-{
-
-	atf_tc_set_md_var(tc, "descr",
-	    "Checks timer_create(2) with CLOCK_REALTIME and sigevent(3), "
-	    "SIGEV_SIGNAL");
-}
+static void	timer_signal_handler(int, siginfo_t *, void *);
+static void	timer_signal_create(clockid_t);
 
-ATF_TC_BODY(timer_create_signal_realtime, tc)
+static void
+timer_signal_handler(int signo, siginfo_t *si, void *osi)
 {
-	int i, signals[6] = {
-		SIGALRM, SIGIO, SIGPROF, SIGUSR1, SIGUSR2, -1
-	};
+	timer_t *tp;
 
-	for (i = 0; signals[i] > 0; i++)
-		timer_signal_create(CLOCK_REALTIME, signals[i]);
-}
+	tp = si->si_value.sival_ptr;
 
-ATF_TC(timer_create_signal_monotonic);
-ATF_TC_HEAD(timer_create_signal_monotonic, tc)
-{
+	if (*tp == t && signo == SIGALRM)
+		fail = false;
 
-	atf_tc_set_md_var(tc, "descr",
-	    "Checks timer_create(2) with CLOCK_MONOTONIC and sigevent(3), "
-	    "SIGEV_SIGNAL");
-}
-
-ATF_TC_BODY(timer_create_signal_monotonic, tc)
-{
-	int i, signals[6] = {
-		SIGALRM, SIGIO, SIGPROF, SIGUSR1, SIGUSR2, -1
-	};
-
-	for (i = 0; signals[i] > 0; i++)
-		timer_signal_create(CLOCK_MONOTONIC, signals[i]);
+	(void)fprintf(stderr, "%s: %s\n", __func__, strsignal(signo));
 }
 
 static void
-timer_signal_create(clockid_t cid, int sig)
+timer_signal_create(clockid_t cid)
 {
 	struct itimerspec tim;
 	struct sigaction act;
 	struct sigevent evt;
-	const char *errstr;
 	sigset_t set;
 
-	error = true;
+	t = 0;
+	fail = true;
 
 	(void)memset(&evt, 0, sizeof(struct sigevent));
 	(void)memset(&act, 0, sizeof(struct sigaction));
 	(void)memset(&tim, 0, sizeof(struct itimerspec));
 
+	/*
+	 * Set handler.
+	 */
 	act.sa_flags = SA_SIGINFO;
 	act.sa_sigaction = timer_signal_handler;
 
-	(void)sigemptyset(&act.sa_mask);
+	ATF_REQUIRE(sigemptyset(&set) == 0);
+	ATF_REQUIRE(sigemptyset(&act.sa_mask) == 0);
 
-	if (sigaction(sig, &act, NULL) != 0) {
-		errstr = "sigaction()";
-		goto fail;
-	}
-
-	(void)sigemptyset(&set);
-	(void)sigaddset(&set, sig);
-
-	if (sigprocmask(SIG_SETMASK, &set, NULL) != 0) {
-		errstr = "sigprocmask()";
-		goto fail;
-	}
-
-	evt.sigev_signo = sig;
+	/*
+	 * Block SIGALRM while configuring the timer.
+	 */
+	ATF_REQUIRE(sigaction(SIGALRM, &act, NULL) == 0);
+	ATF_REQUIRE(sigaddset(&set, SIGALRM) == 0);
+	ATF_REQUIRE(sigprocmask(SIG_SETMASK, &set, NULL) == 0);
+
+	/*
+	 * Create the timer (SIGEV_SIGNAL).
+	 */
+	evt.sigev_signo = SIGALRM;
 	evt.sigev_value.sival_ptr = &t;
 	evt.sigev_notify = SIGEV_SIGNAL;
 
-	if (timer_create(cid, &evt, &t) != 0) {
-		errstr = "timer_create()";
-		goto fail;
-	}
-
-	tim.it_value.tv_sec = 0;
-	tim.it_value.tv_nsec = 1000 * 1000;
-
-	if (timer_settime(t, 0, &tim, NULL) != 0) {
-		errstr = "timer_settime()";
-		goto fail;
-	}
-
-	if (sigprocmask(SIG_UNBLOCK, &set, NULL) != 0) {
-		errstr = "sigprocmask()";
-		goto fail;
-	}
-
-	errno = timer_wait(1);
-
-	if (errno != 0) {
-		errstr = "timer_wait()";
-		goto fail;
-	}
-
-	return;
+	ATF_REQUIRE(timer_create(cid, &evt, &t) == 0);
 
-fail:
-	atf_tc_fail_errno("%s failed (sig %d, clock %d)", errstr, sig, cid);
-}
-
-static void
-timer_signal_handler(int signo, siginfo_t *si, void *osi)
-{
-	timer_t *tp;
+	/*
+	 * Start the timer. After this, unblock the signal.
+	 */
+	tim.it_value.tv_sec = 1;
+	tim.it_value.tv_nsec = 0;
 
-	if (pthread_mutex_lock(&mtx) != 0)
-		return;
+	ATF_REQUIRE(timer_settime(t, 0, &tim, NULL) == 0);
 
-	tp = si->si_value.sival_ptr;
+	(void)sigprocmask(SIG_UNBLOCK, &set, NULL);
+	(void)sleep(2);
 
-	if (*tp == t)
-		error = false;
-
-	(void)pthread_cond_signal(&cond);
-	(void)pthread_mutex_unlock(&mtx);
-	(void)signal(signo, SIG_IGN);
+	if (fail != false)
+		atf_tc_fail("timer failed to fire");
 }
 
-static int
-timer_wait(time_t wait)
+ATF_TC(timer_create_err);
+ATF_TC_HEAD(timer_create_err, tc)
 {
-	struct timespec ts;
-	int rv;
+	/* Cf. PR lib/42434. */
+	atf_tc_set_md_var(tc, "descr", "Check errors from timer_create(2)");
+}
 
-	rv = pthread_mutex_lock(&mtx);
+ATF_TC_BODY(timer_create_err, tc)
+{
+	struct sigevent ev;
 
-	if (rv != 0)
-		return rv;
+	(void)memset(&ev, 0, sizeof(struct sigevent));
 
 	errno = 0;
+	ev.sigev_signo = -1;
+	ev.sigev_notify = SIGEV_SIGNAL;
 
-	if (clock_gettime(CLOCK_REALTIME, &ts) != 0) {
-
-		if (errno == 0)
-			errno = EFAULT;
-
-		return errno;
-	}
+	ATF_REQUIRE_ERRNO(EINVAL, timer_create(CLOCK_REALTIME, &ev, &t) == -1);
 
-	ts.tv_sec += wait;
-	rv = pthread_cond_timedwait(&cond, &mtx, &ts);
-
-	if (rv != 0)
-		return rv;
-
-	rv = pthread_mutex_unlock(&mtx);
-
-	if (rv != 0)
-		return rv;
-
-	if (error != false)
-		return EPROCUNAVAIL;
+	errno = 0;
+	ev.sigev_signo = SIGUSR1;
+	ev.sigev_notify = SIGEV_THREAD + 100;
 
-	return timer_delete(t);
+	ATF_REQUIRE_ERRNO(EINVAL, timer_create(CLOCK_REALTIME, &ev, &t) == -1);
 }
 
-#if 0
-ATF_TC(timer_create_thread);
-ATF_TC_HEAD(timer_create_thread, tc)
+ATF_TC(timer_create_real);
+ATF_TC_HEAD(timer_create_real, tc)
 {
 
 	atf_tc_set_md_var(tc, "descr",
-	    "Checks timer_create(2) and sigevent(3), SIGEV_THREAD");
+	    "Checks timer_create(2) with CLOCK_REALTIME and sigevent(3), "
+	    "SIGEV_SIGNAL");
 }
 
-ATF_TC_BODY(timer_create_thread, tc)
+ATF_TC_BODY(timer_create_real, tc)
 {
-	timer_thread_create(CLOCK_REALTIME);
+	timer_signal_create(CLOCK_REALTIME);
 }
 
-static void
-timer_thread_create(clockid_t cid)
+ATF_TC(timer_create_mono);
+ATF_TC_HEAD(timer_create_mono, tc)
 {
-	struct itimerspec tim;
-	struct sigevent evt;
-	const char *errstr;
 
-	error = true;
-
-	(void)memset(&evt, 0, sizeof(struct sigevent));
-	(void)memset(&tim, 0, sizeof(struct itimerspec));
-
-	evt.sigev_notify = SIGEV_THREAD;
-	evt.sigev_value.sival_ptr = &t;
-	evt.sigev_notify_function = timer_thread_handler;
-	evt.sigev_notify_attributes = NULL;
-
-	if (timer_create(cid, &evt, &t) != 0) {
-		errstr = "timer_create()";
-		goto fail;
-	}
-
-	tim.it_value.tv_sec = 1;
-	tim.it_value.tv_nsec = 0;
-
-	if (timer_settime(t, 0, &tim, NULL) != 0) {
-		errstr = "timer_settime()";
-		goto fail;
-	}
-
-	errno = timer_wait(3);
-
-	if (errno != 0) {
-		errstr = "timer_wait()";
-		goto fail;
-	}
-
-	return;
-
-fail:
-	atf_tc_fail_errno("%s failed (clock %d)", errstr, cid);
+	atf_tc_set_md_var(tc, "descr",
+	    "Checks timer_create(2) with CLOCK_MONOTONIC and sigevent(3), "
+	    "SIGEV_SIGNAL");
 }
 
-static void
-timer_thread_handler(sigval_t sv)
+ATF_TC_BODY(timer_create_mono, tc)
 {
-	timer_t *tp;
-
-	if (pthread_mutex_lock(&mtx) != 0)
-		return;
-
-	tp = sv.sival_ptr;
-
-	if (*tp == t)
-		error = false;
-
-	(void)pthread_cond_signal(&cond);
-	(void)pthread_mutex_unlock(&mtx);
+	timer_signal_create(CLOCK_MONOTONIC);
 }
-#endif
 
 ATF_TP_ADD_TCS(tp)
 {
 
-	ATF_TP_ADD_TC(tp, timer_create_bogus);
-	ATF_TP_ADD_TC(tp, timer_create_signal_realtime);
-	ATF_TP_ADD_TC(tp, timer_create_signal_monotonic);
-     /*	ATF_TP_ADD_TC(tp, timer_create_thread); */
+	ATF_TP_ADD_TC(tp, timer_create_err);
+	ATF_TP_ADD_TC(tp, timer_create_real);
+	ATF_TP_ADD_TC(tp, timer_create_mono);
 
 	return atf_no_error();
 }

Reply via email to