Introduce low-latency signals.
[bertos.git] / bertos / kern / sem.c
index 53ef4cc16cdfec19f33b7bf193a5b0efbee4b6cc..3c645e957ae0723f2b863fb6a0c395eab64a7f17 100644 (file)
@@ -157,6 +157,8 @@ void sem_obtain(struct Semaphore *s)
  */
 void sem_release(struct Semaphore *s)
 {
+       Process *proc = NULL;
+
        proc_forbid();
        sem_verify(s);
 
@@ -168,8 +170,6 @@ void sem_release(struct Semaphore *s)
         */
        if (--s->nest_count == 0)
        {
-               Process *proc;
-
                /* Disown semaphore */
                s->owner = NULL;
 
@@ -178,9 +178,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));
 }