lwIP: integrate lwIP with the BeRTOS wizard
[bertos.git] / bertos / kern / sem.c
index 53ef4cc16cdfec19f33b7bf193a5b0efbee4b6cc..df74355501e32e7e9d53f0828d596bdf0ffbcfa0 100644 (file)
@@ -32,7 +32,6 @@
  *
  * \brief Semaphore based synchronization services.
  *
- * \version $Id$
  * \author Bernie Innocenti <bernie@codewiz.org>
  */
 
@@ -157,6 +156,8 @@ void sem_obtain(struct Semaphore *s)
  */
 void sem_release(struct Semaphore *s)
 {
+       Process *proc = NULL;
+
        proc_forbid();
        sem_verify(s);
 
@@ -168,8 +169,6 @@ void sem_release(struct Semaphore *s)
         */
        if (--s->nest_count == 0)
        {
-               Process *proc;
-
                /* Disown semaphore */
                s->owner = NULL;
 
@@ -178,9 +177,10 @@ void sem_release(struct Semaphore *s)
                {
                        s->nest_count = 1;
                        s->owner = proc;
-                       ATOMIC(SCHED_ENQUEUE(proc));
                }
        }
-
        proc_permit();
+
+       if (proc)
+               ATOMIC(proc_wakeup(proc));
 }