From 79749b135bef212fe96e7d17ade0bb65a14f8340 Mon Sep 17 00:00:00 2001 From: patacongo Date: Thu, 29 Mar 2007 16:53:03 +0000 Subject: Container being deallocated before buffers in container. Caused memory leak. git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@177 42af7a65-404d-4744-a932-0658087f49c3 --- nuttx/ChangeLog | 2 + nuttx/Documentation/NuttX.html | 2 + nuttx/configs/ntosd-dm320/doc/test-result.txt | 102 +++++++++++++++----------- nuttx/lib/lib_init.c | 7 +- 4 files changed, 67 insertions(+), 46 deletions(-) (limited to 'nuttx') diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog index da2341872..9e21a92cd 100644 --- a/nuttx/ChangeLog +++ b/nuttx/ChangeLog @@ -102,5 +102,7 @@ * Improved sharebility of stdout among pthreads (only). Nothing was broken, but by moving the mutual exclusion logic to a higher level, the printf output is more readable. + * Fixed a bug in file system cleanup: A list was being deleted + before the buffers contained in the list. * Started m68322 diff --git a/nuttx/Documentation/NuttX.html b/nuttx/Documentation/NuttX.html index 80c51178a..50172c06d 100644 --- a/nuttx/Documentation/NuttX.html +++ b/nuttx/Documentation/NuttX.html @@ -463,6 +463,8 @@ Other memory: * Improved sharebility of stdout among pthreads (only). Nothing was broken, but by moving the mutual exclusion logic to a higher level, the printf output is more readable. + * Fixed a bug in file system cleanup: A list was being deleted + before the buffers contained in the list. * Started m68322 diff --git a/nuttx/configs/ntosd-dm320/doc/test-result.txt b/nuttx/configs/ntosd-dm320/doc/test-result.txt index 2c36abc7d..56fac5064 100644 --- a/nuttx/configs/ntosd-dm320/doc/test-result.txt +++ b/nuttx/configs/ntosd-dm320/doc/test-result.txt @@ -30,11 +30,11 @@ user_main: argv[4]="Arg4" End of test memory usage: VARIABLE BEFORE AFTER ======== ======== ======== -arena fe1f10 fe1f10 +arena fe1a50 fe1a50 ordblks 2 2 -mxordblk fda9b0 fda9b0 +mxordblk fda4f0 fda4f0 uordblks 53f0 53f0 -fordblks fdcb20 fdcb20 +fordblks fdc660 fdc660 user_main: /dev/null test dev_null: Read 0 bytes from /dev/null @@ -43,11 +43,11 @@ dev_null: Wrote 1024 bytes to /dev/null End of test memory usage: VARIABLE BEFORE AFTER ======== ======== ======== -arena fe1f10 fe1f10 +arena fe1a50 fe1a50 ordblks 2 2 -mxordblk fda9b0 fda9b0 +mxordblk fda4f0 fda4f0 uordblks 53f0 53f0 -fordblks fdcb20 fdcb20 +fordblks fdc660 fdc660 user_main: mutex test Initializing mutex @@ -60,11 +60,11 @@ Starting thread 2 End of test memory usage: VARIABLE BEFORE AFTER ======== ======== ======== -arena fe1f10 fe1f10 +arena fe1a50 fe1a50 ordblks 2 2 -mxordblk fda9b0 fda9b0 +mxordblk fda4f0 fda4f0 uordblks 53f0 53f0 -fordblks fdcb20 fdcb20 +fordblks fdc660 fdc660 user_main: cancel test cancel_test: Test 1: Normal Cancelation @@ -115,11 +115,11 @@ cancel_test: PASS thread terminated with PTHREAD_CANCELED End of test memory usage: VARIABLE BEFORE AFTER ======== ======== ======== -arena fe1f10 fe1f10 +arena fe1a50 fe1a50 ordblks 2 2 -mxordblk fda9b0 fda9b0 +mxordblk fda4f0 fda4f0 uordblks 53f0 53f0 -fordblks fdcb20 fdcb20 +fordblks fdc660 fdc660 user_main: semaphore test sem_test: Initializing semaphore to 0 @@ -153,11 +153,11 @@ poster_func: Thread 3 done End of test memory usage: VARIABLE BEFORE AFTER ======== ======== ======== -arena fe1f10 fe1f10 +arena fe1a50 fe1a50 ordblks 2 2 -mxordblk fda9b0 fda9b0 +mxordblk fda4f0 fda4f0 uordblks 53f0 53f0 -fordblks fdcb20 fdcb20 +fordblks fdc660 fdc660 user_main: condition variable test cond_test: Initializing mutex @@ -181,11 +181,11 @@ cond_test: 0 times, the waiter was in an unexpected state when the signaler ran End of test memory usage: VARIABLE BEFORE AFTER ======== ======== ======== -arena fe1f10 fe1f10 +arena fe1a50 fe1a50 ordblks 2 2 -mxordblk fda9b0 fda9b0 +mxordblk fda4f0 fda4f0 uordblks 53f0 53f0 -fordblks fdcb20 fdcb20 +fordblks fdc660 fdc660 user_main: timed wait test thread_waiter: Initializing mutex @@ -203,11 +203,11 @@ timedwait_test: waiter exited with result=12345678 End of test memory usage: VARIABLE BEFORE AFTER ======== ======== ======== -arena fe1f10 fe1f10 +arena fe1a50 fe1a50 ordblks 2 2 -mxordblk fda9b0 fda9b0 +mxordblk fda4f0 fda4f0 uordblks 53f0 53f0 -fordblks fdcb20 fdcb20 +fordblks fdc660 fdc660 user_main: message queue test mqueue_test: Starting receiver @@ -247,11 +247,11 @@ mqueue_test: receiver has already terminated End of test memory usage: VARIABLE BEFORE AFTER ======== ======== ======== -arena fe1f10 fe1f10 +arena fe1a50 fe1a50 ordblks 2 2 -mxordblk fda9b0 fda9b0 +mxordblk fda4f0 fda4f0 uordblks 53f0 53f0 -fordblks fdcb20 fdcb20 +fordblks fdc660 fdc660 user_main: signal handler test sighand_test: Initializing semaphore to 0 @@ -263,6 +263,13 @@ waiter_main: Registering signal handler waiter_main: oact.sigaction=0 oact.sa_flags=0 oact.sa_mask=0 waiter_main: Waiting on semaphore sighand_test: Signaling pid=16 with signo=17 sigvalue=42 +MALLOC(272)->207f0 +MALLOC(400)->20900 +MALLOC(656)->20a90 +MALLOC(1040)->20d20 +MALLOC(1040)->21130 +MALLOC(1040)->21540 +MALLOC(4112)->21950 wakeup_action: Received signal 17 wakeup_action: sival_int=42 wakeup_action: si_code=1 @@ -270,15 +277,22 @@ wakeup_action: ucontext=0 waiter_main: sem_wait() successfully interrupted by signal waiter_main: done sighand_test: done +FREE(21950) +FREE(20900) +FREE(20d20) +FREE(21130) +FREE(21540) +FREE(20a90) +FREE(207f0) End of test memory usage: VARIABLE BEFORE AFTER ======== ======== ======== -arena fe1f10 fe1f10 +arena fe1a50 fe1a50 ordblks 2 2 -mxordblk fda9b0 fda9b0 -uordblks 53f0 5500 -fordblks fdcb20 fdca10 +mxordblk fda4f0 fda4f0 +uordblks 53f0 53f0 +fordblks fdc660 fdc660 user_main: POSIX timer test timer_test: Initializing semaphore to 0 @@ -328,11 +342,11 @@ timer_test: done End of test memory usage: VARIABLE BEFORE AFTER ======== ======== ======== -arena fe1f10 fe1f10 +arena fe1a50 fe1a50 ordblks 2 2 -mxordblk fda9b0 fda9b0 -uordblks 5500 5500 -fordblks fdca10 fdca10 +mxordblk fda4f0 fda4f0 +uordblks 53f0 53f0 +fordblks fdc660 fdc660 user_main: round-robin scheduler test rr_test: Starting sieve1 thread @@ -351,11 +365,11 @@ rr_test: Done End of test memory usage: VARIABLE BEFORE AFTER ======== ======== ======== -arena fe1f10 fe1f10 +arena fe1a50 fe1a50 ordblks 2 2 -mxordblk fda9b0 fda9b0 -uordblks 5500 5500 -fordblks fdca10 fdca10 +mxordblk fda4f0 fda4f0 +uordblks 53f0 53f0 +fordblks fdc660 fdc660 user_main: barrier test barrier_test: Initializing barrier @@ -411,18 +425,18 @@ barrier_test: Thread 7 completed with result=0 End of test memory usage: VARIABLE BEFORE AFTER ======== ======== ======== -arena fe1f10 fe1f10 +arena fe1a50 fe1a50 ordblks 2 2 -mxordblk fda9b0 fda9b0 -uordblks 5500 5500 -fordblks fdca10 fdca10 +mxordblk fda4f0 fda4f0 +uordblks 53f0 53f0 +fordblks fdc660 fdc660 Final memory usage: VARIABLE BEFORE AFTER ======== ======== ======== -arena fe1f10 fe1f10 +arena fe1a50 fe1a50 ordblks 2 2 -mxordblk fda9b0 fda9b0 -uordblks 53f0 5500 -fordblks fdcb20 fdca10 +mxordblk fda4f0 fda4f0 +uordblks 53f0 53f0 +fordblks fdc660 fdc660 user_main: Exitting diff --git a/nuttx/lib/lib_init.c b/nuttx/lib/lib_init.c index 0e820ff4c..8bf872c55 100644 --- a/nuttx/lib/lib_init.c +++ b/nuttx/lib/lib_init.c @@ -173,9 +173,9 @@ void lib_releaselist(FAR struct streamlist *list) /* Destroy the semaphore and release the filelist */ (void)sem_destroy(&list->sl_sem); - sched_free(list); - /* Initialize each FILE structure */ + /* Release each stream in the list */ + #if CONFIG_STDIO_BUFFER_SIZE > 0 for (i = 0; i < CONFIG_NFILE_STREAMS; i++) { @@ -190,6 +190,9 @@ void lib_releaselist(FAR struct streamlist *list) } } #endif + /* Finally, release the list itself */ + + sched_free(list); } } } -- cgit v1.2.3