From: Subrata <sub...@us...> - 2008-06-18 13:01:43
|
Update of /cvsroot/ltp/ltp/testcases/kernel/syscalls/ipc/semctl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2196/ltp/testcases/kernel/syscalls/ipc/semctl Modified Files: semctl06.c Log Message: This patch fix a concurrency issue in semctl06. The IPC keys used for this test could conflict with keys from another task. Signed-off-by: Matthieu Fertré <mf...@ir...>. Index: semctl06.c =================================================================== RCS file: /cvsroot/ltp/ltp/testcases/kernel/syscalls/ipc/semctl/semctl06.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** semctl06.c 26 May 2006 06:41:28 -0000 1.8 --- semctl06.c 18 Jun 2008 13:00:57 -0000 1.9 *************** *** 18,25 **** */ - /* 06/30/2001 Port to Linux nsh...@us... */ - /* 10/30/2002 Port to LTP dba...@us... */ - - /* * NAME --- 18,21 ---- *************** *** 38,41 **** --- 34,44 ---- * commands to remove any semaphores left in the system due to a * premature exit of this test. + * + * HISTORY + * 06/30/2001 Port to Linux nsh...@us... + * 10/30/2002 Port to LTP dba...@us... + * 12/03/2008 Matthieu Fertré (Mat...@ir...) + * - Fix concurrency issue. The IPC keys used for this test could + * conflict with keys from another task. */ *************** *** 112,116 **** main(int argc, char **argv) { ! register int i, j, ok, pid; int count, child, status, nwait; --- 115,119 ---- main(int argc, char **argv) { ! register int i, pid; int count, child, status, nwait; *************** *** 129,152 **** setup(); /*--------------------------------------------------------------*/ - srand(getpid()); - tid = -1; ! for (i = 0; i < NPROCS; i++) { ! do { ! keyarray[i] = (key_t)rand(); ! if (keyarray[i] == IPC_PRIVATE) { ! ok = 0; ! continue; ! } ! ok = 1; ! for (j = 0; j < i; j++) { ! if (keyarray[j] == keyarray[i]) { ! ok = 0; ! break; ! } ! } ! } while (ok == 0); ! } if ((signal(SIGTERM, term)) == SIG_ERR) { --- 132,139 ---- setup(); /*--------------------------------------------------------------*/ tid = -1; ! for (i = 0; i < NPROCS; i++) ! keyarray[i] = getipckey(); if ((signal(SIGTERM, term)) == SIG_ERR) { *************** *** 215,219 **** nwait = 0; srand(getpid()); ! if ((id = semget(key, NSEMS, IPC_CREAT)) < 0) { tst_resm(TFAIL, "\tsemget() failed errno %d", errno); exit(1); --- 202,206 ---- nwait = 0; srand(getpid()); ! if ((id = semget(key, NSEMS, IPC_CREAT|IPC_EXCL)) < 0) { tst_resm(TFAIL, "\tsemget() failed errno %d", errno); exit(1); *************** *** 437,440 **** --- 424,434 ---- */ TEST_PAUSE; + + /* + * Create a temporary directory and cd into it. + * This helps to ensure that a unique msgkey is created. + * See ../lib/libipc.c for more information. + */ + tst_tmpdir(); } *************** *** 447,450 **** --- 441,447 ---- cleanup() { + /* Remove the temporary directory */ + tst_rmdir(); + /* * print timing stats if that option was specified. |