Date: Tue, 5 Jan 2010 10:12:50 -0700 From: Garrett Cooper <yanefbsd@gmail.com> To: David Xu <davidxu@FreeBSD.org> Cc: "svn-src-head@freebsd.org" <svn-src-head@freebsd.org>, "svn-src-all@freebsd.org" <svn-src-all@freebsd.org>, "src-committers@freebsd.org" <src-committers@freebsd.org> Subject: Re: svn commit: r201575 - head/tools/regression/posixsem2 Message-ID: <80B3618B-57A9-4524-B4E1-0955DF291344@gmail.com> In-Reply-To: <201001051234.o05CYDlR096994@svn.freebsd.org> References: <201001051234.o05CYDlR096994@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Sent from my iPhone On Jan 5, 2010, at 5:34 AM, David Xu <davidxu@FreeBSD.org> wrote: > Author: davidxu > Date: Tue Jan 5 12:34:13 2010 > New Revision: 201575 > URL: http://svn.freebsd.org/changeset/base/201575 > > Log: > Add test code for POSIX semaphore implementation. > > Added: > head/tools/regression/posixsem2/ > head/tools/regression/posixsem2/Makefile (contents, props changed) > head/tools/regression/posixsem2/semtest.c (contents, props changed) > > Added: head/tools/regression/posixsem2/Makefile > === > === > === > ===================================================================== > --- /dev/null 00:00:00 1970 (empty, because file is newly added) > +++ head/tools/regression/posixsem2/Makefile Tue Jan 5 12:34:13 > 2010 (r201575) > @@ -0,0 +1,9 @@ > +# $FreeBSD$ > + > +PROG= semtest > +SRCS= semtest.c > +NO_MAN= > + > +WARNS?= 3 > + > +.include <bsd.prog.mk> > > Added: head/tools/regression/posixsem2/semtest.c > === > === > === > ===================================================================== > --- /dev/null 00:00:00 1970 (empty, because file is newly added) > +++ head/tools/regression/posixsem2/semtest.c Tue Jan 5 12:34:13 > 2010 (r201575) > @@ -0,0 +1,101 @@ > +/* $FreeBSD$ */ > + > +#include <sys/types.h> > +#include <sys/wait.h> > +#include <sys/mman.h> > +#include <semaphore.h> > +#include <stdio.h> > +#include <stdlib.h> > +#include <err.h> > +#include <fcntl.h> > +#include <unistd.h> > + > +#define SEM_NAME "/semtst" > + > +int test_unnamed(void); > +int test_named(void); > + > +int > +test_unnamed(void) > +{ > + sem_t *s; > + pid_t pid; > + int status; > + > + printf("testing unnamed process-shared semaphore\n"); > + s = (sem_t *)mmap(NULL, sizeof(sem_t), PROT_READ|PROT_WRITE, > MAP_ANON|MAP_SHARED, > + -1, 0); > + if (s == MAP_FAILED) > + err(1, "mmap failed"); > + if (sem_init(s, 1, 0)) > + err(2, "sem_init failed"); > + if ((pid = fork()) == 0) { > + printf("child: sem_wait()\n"); > + if (sem_wait(s)) > + err(3, "sem_wait failed"); > + printf("child: sem_wait() returned\n"); > + exit(0); > + } else { > + sleep(1); > + printf("parent: sem_post()\n"); > + if (sem_post(s)) > + err(4, "sem_post failed"); > + waitpid(pid, &status, 0); Same as below... > + if (WIFEXITED(status) && WEXITSTATUS(status) == 0) > + printf("OK.\n"); > + else > + printf("Failure."); > + } > + return (0); > +} > + > +int > +test_named(void) > +{ > + sem_t *s, *s2; > + pid_t pid; > + int status; > + > + printf("testing named process-shared semaphore\n"); > + sem_unlink(SEM_NAME); > + s = sem_open(SEM_NAME, O_CREAT, 0777); > + if (s == SEM_FAILED) > + err(1, "sem_open failed"); > + s2 = sem_open(SEM_NAME, O_CREAT, 0777); > + if (s2 == SEM_FAILED) > + err(2, "second sem_open call failed"); > + if (s != s2) > + err(3, "two sem_open calls for same semaphore do not returm > same address."); > + if (sem_close(s2)) > + err(4, "sem_close failed"); > + if ((pid = fork()) == 0) { > + printf("child: sem_wait()\n"); > + if (sem_wait(s)) > + err(5, "sem_wait failed"); > + printf("child: sem_wait() returned\n"); > + exit(0); > + } else { > + sleep(1); > + printf("parent: sem_post()\n"); > + if (sem_post(s)) > + err(6, "sem_post failed"); > + waitpid(pid, &status, 0); waitpid can fail and the status reported could be completely bogus. Maybe this should be the first branch condition (check for == 0) in the if-statement below? > + if (WIFEXITED(status) && WEXITSTATUS(status) == 0) > + printf("OK.\n"); > + else > + printf("Failure."); > + } > + > + if (sem_close(s)) > + err(7, "sem_close failed"); > + > + return (0); > +} > + > +int > +main(void) > +{ > + test_unnamed(); > + test_named(); > + return (0); > +}
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?80B3618B-57A9-4524-B4E1-0955DF291344>