From 104d1669a344de413ea4c7f1106fcf4a5d95b610 Mon Sep 17 00:00:00 2001
From: rpj <rpj>
Date: Fri, 26 Oct 2001 00:59:36 +0000
Subject: semaphore.c (sem_init): somehow when sem_t reverted to an opaque
 struct the calloc NULL check was left in the conditionally included section.
 (sem_destroy): Likewise, the calloced sem_t wasn't being freed.

---
 ChangeLog   |  5 ++++-
 semaphore.c | 11 +++++++----
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 93d5d80..2e27f6a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,7 +5,10 @@
 	* semaphore.c (sem_init): Fix typo and missing bracket
 	in conditionally compiled code. Only older versions of
 	WinCE require this code, hence it doesn't normally get
-	tested.
+	tested; somehow when sem_t reverted to an opaque struct
+	the calloc NULL check was left in the conditionally included
+	section.
+	(sem_destroy): Likewise, the calloced sem_t wasn't being freed.
 
 2001-10-25  Ross Johnson  <rpj@setup1.ise.canberra.edu.au>
 
diff --git a/semaphore.c b/semaphore.c
index 1e23285..0dc9ed9 100644
--- a/semaphore.c
+++ b/semaphore.c
@@ -90,14 +90,16 @@ sem_init (sem_t * sem, int pshared, unsigned int value)
     }
   else
     {
-      s = (sem_t) calloc (1, sizeof (*s));
 
-#ifdef NEED_SEM
+      s = (sem_t) calloc (1, sizeof (*s));
 
       if (NULL == s)
         {
           result = ENOMEM;
         }
+
+#ifdef NEED_SEM
+
       else
         {
           s->value = value;
@@ -184,7 +186,7 @@ sem_destroy (sem_t * sem)
     }
   else
     {
-	s = *sem;
+      s = *sem;
       *sem = NULL;
 
 #ifdef NEED_SEM
@@ -197,7 +199,6 @@ sem_destroy (sem_t * sem)
       else
         {
           DeleteCriticalSection(&s->sem_lock_cs);
-          free(s);
         }
 
 #else /* NEED_SEM */
@@ -218,6 +219,8 @@ sem_destroy (sem_t * sem)
       return -1;
     }
 
+  free(s);
+
   return 0;
 
 }				/* sem_destroy */
-- 
cgit v1.2.3