posixcompat: fix incorrect destruction of pthread_cond
authorZaheer Chothia <zchothia@inf.ethz.ch>
Mon, 20 Apr 2015 20:24:36 +0000 (22:24 +0200)
committerZaheer Chothia <zchothia@inf.ethz.ch>
Mon, 20 Apr 2015 21:08:44 +0000 (23:08 +0200)
The object being freed was the wrapper, which belongs to the caller and
may even have static lifetime (.data section), whereas now it correctly
relases the inner block of memory which was allocated in
`pthread_cont_init`.

(The unrelated change in mmap add a missing comma when debug is enabled.)

Signed-off-by: Zaheer Chothia <zchothia@inf.ethz.ch>

lib/posixcompat/mmap.c
lib/posixcompat/pthreads.c

index c9f7a61..4c435a6 100644 (file)
@@ -13,7 +13,7 @@
 
 void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset)
 {
-    POSIXCOMPAT_DEBUG("Warning: mmap(%p, %zx, %d, %d, %d, %zu) ignored\n"
+    POSIXCOMPAT_DEBUG("Warning: mmap(%p, %zx, %d, %d, %d, %zu) ignored\n",
             addr, length, prot, flags, fd, offset);
     USER_PANIC("mmap NYI!");
     return NULL;
@@ -21,7 +21,7 @@ void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset)
 
 int munmap(void *addr, size_t length)
 {
-    POSIXCOMPAT_DEBUG("Warning: munmap(%p, %zx) ignored\n"
+    POSIXCOMPAT_DEBUG("Warning: munmap(%p, %zx) ignored\n",
             addr, length);
     USER_PANIC("mmap NYI!");
     return -1;
index e99f900..4fd07c0 100644 (file)
@@ -324,7 +324,9 @@ int pthread_cond_broadcast(pthread_cond_t *cond)
 
 int pthread_cond_destroy(pthread_cond_t *cond)
 {
-    free(cond);
+    if (cond != NULL) {
+        free(*cond);
+    }
     return 0;
 }