This is an automated email from the ASF dual-hosted git repository.

acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 5fa8634ce7b43196a43253ace63963e1d2e3e897
Author: wangchengdong <[email protected]>
AuthorDate: Wed Oct 29 10:37:29 2025 +0800

    sched/event: Restore critical section protection for event wait and post
    
        Restore the use of critical sections to provide mutual exclusion
        between event wait and post operations. This allows replacing the
        heavier semaphore-based mechanism with direct scheduler operations
        for synchronization.
    
    Signed-off-by: Chengdong Wang [email protected]
---
 include/nuttx/event.h       | 2 --
 sched/event/event_clear.c   | 4 ++--
 sched/event/event_getmask.c | 4 ++--
 sched/event/event_init.c    | 1 -
 sched/event/event_post.c    | 4 ++--
 sched/event/event_wait.c    | 8 ++++----
 6 files changed, 10 insertions(+), 13 deletions(-)

diff --git a/include/nuttx/event.h b/include/nuttx/event.h
index 90afafbac12..365443c8664 100644
--- a/include/nuttx/event.h
+++ b/include/nuttx/event.h
@@ -31,7 +31,6 @@
 
 #include <nuttx/list.h>
 #include <nuttx/semaphore.h>
-#include <nuttx/spinlock.h>
 
 /****************************************************************************
  * Pre-processor Definitions
@@ -73,7 +72,6 @@ struct nxevent_s
 {
   struct list_node         list;   /* Waiting list of nxevent_wait_t */
   volatile nxevent_mask_t  events; /* Pending Events */
-  spinlock_t               lock;   /* Spinlock */
 };
 
 #ifdef CONFIG_FS_NAMED_EVENTS
diff --git a/sched/event/event_clear.c b/sched/event/event_clear.c
index df70486c4a9..6f67b12f3cf 100644
--- a/sched/event/event_clear.c
+++ b/sched/event/event_clear.c
@@ -60,12 +60,12 @@ nxevent_mask_t nxevent_clear(FAR nxevent_t *event, 
nxevent_mask_t mask)
 
   DEBUGASSERT(event != NULL);
 
-  flags = spin_lock_irqsave(&event->lock);
+  flags = enter_critical_section();
 
   events = event->events;
   event->events &= ~mask;
 
-  spin_unlock_irqrestore(&event->lock, flags);
+  leave_critical_section(flags);
 
   return events;
 }
diff --git a/sched/event/event_getmask.c b/sched/event/event_getmask.c
index f15e6e72633..1ab3031d327 100644
--- a/sched/event/event_getmask.c
+++ b/sched/event/event_getmask.c
@@ -58,11 +58,11 @@ nxevent_mask_t nxevent_getmask(FAR nxevent_t *event)
 
   DEBUGASSERT(event != NULL);
 
-  flags = spin_lock_irqsave(&event->lock);
+  flags = enter_critical_section();
 
   events = event->events;
 
-  spin_unlock_irqrestore(&event->lock, flags);
+  leave_critical_section(flags);
 
   return events;
 }
diff --git a/sched/event/event_init.c b/sched/event/event_init.c
index 2525969b2d2..5d93b81f537 100644
--- a/sched/event/event_init.c
+++ b/sched/event/event_init.c
@@ -49,6 +49,5 @@
 void nxevent_init(FAR nxevent_t *event, nxevent_mask_t events)
 {
   event->events = events;
-  spin_lock_init(&event->lock);
   list_initialize(&event->list);
 }
diff --git a/sched/event/event_post.c b/sched/event/event_post.c
index 056107b87eb..07b9f0b4f23 100644
--- a/sched/event/event_post.c
+++ b/sched/event/event_post.c
@@ -81,7 +81,7 @@ int nxevent_post(FAR nxevent_t *event, nxevent_mask_t events,
       return -EINVAL;
     }
 
-  flags = spin_lock_irqsave_nopreempt(&event->lock);
+  flags = enter_critical_section();
 
   if ((eflags & NXEVENT_POST_SET) != 0)
     {
@@ -135,7 +135,7 @@ int nxevent_post(FAR nxevent_t *event, nxevent_mask_t 
events,
         }
     }
 
-  spin_unlock_irqrestore_nopreempt(&event->lock, flags);
+  leave_critical_section(flags);
 
   return ret;
 }
diff --git a/sched/event/event_wait.c b/sched/event/event_wait.c
index f70b85564b1..04d62cee249 100644
--- a/sched/event/event_wait.c
+++ b/sched/event/event_wait.c
@@ -80,7 +80,7 @@ nxevent_mask_t nxevent_tickwait_wait(FAR nxevent_t *event,
       events = ~0;
     }
 
-  flags = spin_lock_irqsave(&event->lock);
+  flags = enter_critical_section();
 
   if ((eflags & NXEVENT_WAIT_RESET) != 0)
     {
@@ -126,7 +126,7 @@ nxevent_mask_t nxevent_tickwait_wait(FAR nxevent_t *event,
       wait->eflags = eflags;
 
       list_add_tail(&event->list, &(wait->node));
-      spin_unlock_irqrestore(&event->lock, flags);
+      leave_critical_section(flags);
 
       /* Wait for the event */
 
@@ -143,7 +143,7 @@ nxevent_mask_t nxevent_tickwait_wait(FAR nxevent_t *event,
 
       nxsem_destroy(&(wait->sem));
 
-      flags = spin_lock_irqsave(&event->lock);
+      flags = enter_critical_section();
       if (ret == 0)
         {
           events = wait->expect;
@@ -160,7 +160,7 @@ nxevent_mask_t nxevent_tickwait_wait(FAR nxevent_t *event,
         }
     }
 
-  spin_unlock_irqrestore(&event->lock, flags);
+  leave_critical_section(flags);
 
   return events;
 }

Reply via email to