From: Subrata <sub...@us...> - 2008-09-10 08:14:49
|
Update of /cvsroot/ltp/ltp/testcases/kernel/ipc/ipc_stress In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6526/ltp/testcases/kernel/ipc/ipc_stress Modified Files: message_queue_test_01.c Log Message: Fix memory leak in message_queue_test_01. Use valgrind tool (http://valgrind.org/) to check the memory leak problem. Now the valgrind can be compiled on the following platforms: X86/Linux, AMD64/Linux, PPC32/Linux, PPC64/Linux. ================= Before patching ================= # valgrind --leak-check=full --show-reachable=yes ./message_queue_test_01 ........................... ==28721== LEAK SUMMARY: ==28721== definitely lost: 264 bytes in 1 blocks. ==28721== possibly lost: 0 bytes in 0 blocks. ==28721== still reachable: 0 bytes in 0 blocks. ==28721== suppressed: 0 bytes in 0 blocks. ================= After patching ================= # valgrind --leak-check=full --show-reachable=yes ./message_queue_test_01 ........................... ==29051== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 3 from 1) ==29051== malloc/free: in use at exit: 0 bytes in 0 blocks. ==29051== malloc/free: 1 allocs, 1 frees, 264 bytes allocated. ==29051== For counts of detected errors, rerun with: -v ==29051== All heap blocks were freed -- no leaks are possible. Signed-off-by: Jin Bing Guo <gu...@cn...> Index: message_queue_test_01.c =================================================================== RCS file: /cvsroot/ltp/ltp/testcases/kernel/ipc/ipc_stress/message_queue_test_01.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** message_queue_test_01.c 10 Nov 2007 09:24:41 -0000 1.3 --- message_queue_test_01.c 10 Sep 2008 08:14:46 -0000 1.4 *************** *** 84,87 **** --- 84,89 ---- #define BUF_SIZE 256 + #define SAFE_FREE(p) { if(p) { free(p); (p)=NULL; } } + /* * Function prototypes *************** *** 149,156 **** buf = (struct msgbuf *)calloc ((size_t)(sizeof(struct msgbuf) + BUF_SIZE), sizeof (char)); ! if (msgrcv (msqid, (void *)buf, (size_t)BUF_SIZE, FIRST_MSG, 0) < 0) sys_error ("msgsnd failed", __LINE__); printf ("\n\tParent: received message: %s\n", buf->mtext); fflush (stdout); /* --- 151,164 ---- buf = (struct msgbuf *)calloc ((size_t)(sizeof(struct msgbuf) + BUF_SIZE), sizeof (char)); ! if(!buf) ! sys_error ("calloc failed", __LINE__); ! ! if (msgrcv (msqid, (void *)buf, (size_t)BUF_SIZE, FIRST_MSG, 0) < 0) { ! SAFE_FREE(buf); sys_error ("msgsnd failed", __LINE__); + } printf ("\n\tParent: received message: %s\n", buf->mtext); fflush (stdout); + SAFE_FREE(buf); /* *************** *** 197,200 **** --- 205,211 ---- buf = (struct msgbuf *)calloc ((size_t)(sizeof(struct msgbuf) + BUF_SIZE), sizeof (char)); + if(!buf) + sys_error ("calloc failed", __LINE__); + buf->mtype = 1; sprintf (buf->mtext, "\"message queue transmission test....\""); *************** *** 203,208 **** printf ("\n\tChild: sending message: %s\n", buf->mtext); fflush (stdout); ! if (msgsnd (msqid, buf, nbytes, 0) < 0) sys_error ("msgsnd failed", __LINE__); } --- 214,222 ---- printf ("\n\tChild: sending message: %s\n", buf->mtext); fflush (stdout); ! if (msgsnd (msqid, buf, nbytes, 0) < 0) { ! SAFE_FREE(buf); sys_error ("msgsnd failed", __LINE__); + } + SAFE_FREE(buf); } |