summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2007-03-29 16:53:03 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2007-03-29 16:53:03 +0000
commit79749b135bef212fe96e7d17ade0bb65a14f8340 (patch)
treecf5597a209ebcc50b8c6f25bdde967d416b9eef4
parent134f57877848076567f0f86c82075378d5ff92d4 (diff)
downloadnuttx-79749b135bef212fe96e7d17ade0bb65a14f8340.tar.gz
nuttx-79749b135bef212fe96e7d17ade0bb65a14f8340.tar.bz2
nuttx-79749b135bef212fe96e7d17ade0bb65a14f8340.zip
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
-rw-r--r--nuttx/ChangeLog2
-rw-r--r--nuttx/Documentation/NuttX.html2
-rw-r--r--nuttx/configs/ntosd-dm320/doc/test-result.txt102
-rw-r--r--nuttx/lib/lib_init.c7
4 files changed, 67 insertions, 46 deletions
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
</pre></ul>
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);
}
}
}