Mercurial > hg > octave-nkf > gnulib-hg
changeset 12996:0de35819273a
Remove portability problems from 'flock' unit test.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Mon, 15 Mar 2010 03:07:26 +0100 |
parents | 6991d7777e06 |
children | 3870d1e5f8d4 |
files | ChangeLog tests/test-flock.c |
diffstat | 2 files changed, 33 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2010-03-14 Bruno Haible <bruno@clisp.org> + + * tests/test-flock.c (test_exclusive): Comment out a test that causes + portability problems. Instead use a simpler test. + (main): Check that invalid arguments are rejected only on Linux. + 2010-03-14 Bruno Haible <bruno@clisp.org> Fix bug introduced on 2009-12-31.
--- a/tests/test-flock.c +++ b/tests/test-flock.c @@ -58,8 +58,30 @@ fd2 = open (file, O_RDWR, 0644); ASSERT (fd2 >= 0); + r = flock (fd2, LOCK_EX | LOCK_NB); + ASSERT (r == -1); /* Was unable to acquire a second exclusive lock. */ + +#if 0 + /* The Linux manual page of flock(2) says: + "A process may only hold one type of lock (shared or exclusive) on a + file. Subsequent flock() calls on an already locked file will convert + an existing lock to the new lock mode." + So, the call below should convert the exclusive lock for fd to a shared + and thus succeeds. The fact that it doesn't but instead fails is + apparently a bug. */ + /* The Solaris manual page of flock(2) says: + "More than one process may hold a shared lock for a file at any given + time, but multiple exclusive, or both shared and exclusive, locks may + not exist simultaneously on a file. ... + Requesting a lock on an object that is already locked normally causes + the caller to block until the lock may be acquired. If LOCK_NB is + included in operation, then this will not happen; instead, the call + will fail and the error EWOULDBLOCK will be returned." + So, the call below should fail and set errno to EWOULDBLOCK. The fact + that it succeeds is apparently a bug. */ r = flock (fd2, LOCK_SH | LOCK_NB); - ASSERT (r == -1); /* Was unable to acquire a second exclusive lock. */ + ASSERT (r == -1); +#endif ASSERT (flock (fd, LOCK_UN) == 0); ASSERT (close (fd2) == 0); @@ -76,7 +98,9 @@ ASSERT (fd >= 0); ASSERT (write (fd, "hello", 5) == 5); - /* Some impossible operation codes which should never be accepted. */ +#if defined __linux__ + /* Invalid operation codes are rejected by the Linux implementation and by + the gnulib replacement, but not by the MacOS X implementation. */ ASSERT (flock (fd, LOCK_SH | LOCK_EX) == -1); ASSERT (errno == EINVAL); ASSERT (flock (fd, LOCK_SH | LOCK_UN) == -1); @@ -85,6 +109,7 @@ ASSERT (errno == EINVAL); ASSERT (flock (fd, 0) == -1); ASSERT (errno == EINVAL); +#endif test_shared (file, fd); test_exclusive (file, fd);