diff --git a/ChangeLog b/ChangeLog index da2341872c79be8b0b705f55776256dba866d599..9e21a92cde1dc79ca5c10756ba788a57285b3154 100644 --- a/ChangeLog +++ b/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/Documentation/NuttX.html b/Documentation/NuttX.html index 80c51178aacbe66d55336e65e5fb0b2e3c255e60..50172c06d5523a20a285d7bedeb35dc2a4528fbd 100644 --- a/Documentation/NuttX.html +++ b/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 </pre></ul> diff --git a/configs/ntosd-dm320/doc/test-result.txt b/configs/ntosd-dm320/doc/test-result.txt index 2c36abc7d4e27d1032d9c86fdc5b07f6d1272e36..56fac5064a1dc55ff30b0b0fe022343b14279101 100644 --- a/configs/ntosd-dm320/doc/test-result.txt +++ b/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/lib/lib_init.c b/lib/lib_init.c index 0e820ff4ca115fdcf7336150026084855e98441d..8bf872c55ae5a3244e6f8c641b02200eddbfc73c 100644 --- a/lib/lib_init.c +++ b/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); } } }