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

kasjer pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git

commit 704a2e6c268a882a38ea73d5d77ba06b2388e15f
Author: Jerzy Kasenberg <[email protected]>
AuthorDate: Thu Oct 22 11:30:49 2026 +0200

    kernel/os: Add os_eventq_loop()
    
    Almost every user of os_eventq_run() wraps it in the same endless
    loop. Add os_eventq_loop() that does exactly that and never returns,
    and os_eventq_task_handler() that runs it on the event queue passed
    as task argument, so it can be given directly to os_task_init().
    
    Use os_eventq_loop() in os_main() for selftest builds and in testutil
    default task handler.
    
    Assisted-by: Claude:claude-opus-5-5
    Signed-off-by: Jerzy Kasenberg <[email protected]>
---
 kernel/os/include/os/os_eventq.h | 16 ++++++++++++++++
 kernel/os/src/os.c               |  4 +---
 kernel/os/src/os_eventq.c        | 14 ++++++++++++++
 test/testutil/src/testutil.c     |  4 +---
 4 files changed, 32 insertions(+), 6 deletions(-)

diff --git a/kernel/os/include/os/os_eventq.h b/kernel/os/include/os/os_eventq.h
index ad9d74619..046410700 100644
--- a/kernel/os/include/os/os_eventq.h
+++ b/kernel/os/include/os/os_eventq.h
@@ -158,6 +158,22 @@ struct os_event *os_eventq_get(struct os_eventq *evq);
  */
 void os_eventq_run(struct os_eventq *evq);
 
+/**
+ * Process events from the event queue forever.  Equivalent to calling
+ * os_eventq_run() in an endless loop.  Never returns.
+ *
+ * @param evq                   The event queue to process.
+ */
+void os_eventq_loop(struct os_eventq *evq) __attribute__((noreturn));
+
+/**
+ * Task handler that processes events from the event queue passed as task
+ * argument forever.  Can be passed directly to os_task_init().
+ *
+ * @param arg                   The event queue to process
+ *                                  (struct os_eventq *).
+ */
+void os_eventq_task_handler(void *arg) __attribute__((noreturn));
 
 /**
  * Poll the list of event queues specified by the evq parameter
diff --git a/kernel/os/src/os.c b/kernel/os/src/os.c
index e926337b5..d71814b04 100644
--- a/kernel/os/src/os.c
+++ b/kernel/os/src/os.c
@@ -182,9 +182,7 @@ os_main(void *arg)
     fn(0, NULL);
 #else
     (void)fn;
-    while (1) {
-        os_eventq_run(os_eventq_dflt_get());
-    }
+    os_eventq_loop(os_eventq_dflt_get());
 #endif
     assert(0);
 }
diff --git a/kernel/os/src/os_eventq.c b/kernel/os/src/os_eventq.c
index c070ab08c..11219eb42 100644
--- a/kernel/os/src/os_eventq.c
+++ b/kernel/os/src/os_eventq.c
@@ -215,6 +215,20 @@ os_eventq_run(struct os_eventq *evq)
 #endif
 }
 
+void
+os_eventq_loop(struct os_eventq *evq)
+{
+    while (1) {
+        os_eventq_run(evq);
+    }
+}
+
+void
+os_eventq_task_handler(void *arg)
+{
+    os_eventq_loop(arg);
+}
+
 static struct os_event *
 os_eventq_poll_0timo(struct os_eventq **evq, int nevqs)
 {
diff --git a/test/testutil/src/testutil.c b/test/testutil/src/testutil.c
index d59e9d07c..3f150185c 100644
--- a/test/testutil/src/testutil.c
+++ b/test/testutil/src/testutil.c
@@ -104,9 +104,7 @@ tu_restart(void)
 static void
 tu_dflt_task_handler(void *arg)
 {
-    while (1) {
-        os_eventq_run(os_eventq_dflt_get());
-    }
+    os_eventq_loop(os_eventq_dflt_get());
 }
 
 static void

Reply via email to