You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by cc...@apache.org on 2017/02/13 19:31:39 UTC

[04/10] incubator-mynewt-core git commit: kernel/queue: Fix SLIST_REMOVE macro

kernel/queue: Fix SLIST_REMOVE macro

This patch adds a missing NULL check of list element.
Without that patch, if somebody wants to remove element which is
not on the list, crash occurs


Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/82c6878e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/82c6878e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/82c6878e

Branch: refs/heads/develop
Commit: 82c6878e75b257f4a1735c2ab68de72e2dc983c8
Parents: e9ff7ac
Author: \u0141ukasz Rymanowski <lu...@codecoup.pl>
Authored: Sun Jan 29 23:44:17 2017 +0100
Committer: \u0141ukasz Rymanowski <lu...@codecoup.pl>
Committed: Thu Feb 2 12:59:59 2017 +0100

----------------------------------------------------------------------
 kernel/os/include/os/queue.h | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/82c6878e/kernel/os/include/os/queue.h
----------------------------------------------------------------------
diff --git a/kernel/os/include/os/queue.h b/kernel/os/include/os/queue.h
index faffd85..a3a0790 100755
--- a/kernel/os/include/os/queue.h
+++ b/kernel/os/include/os/queue.h
@@ -158,10 +158,11 @@ struct {                                                \
     }                                                       \
     else {                                                  \
         struct type *curelm = SLIST_FIRST((head));          \
-        while (SLIST_NEXT(curelm, field) != (elm))          \
-            curelm = SLIST_NEXT(curelm, field);             \
-        SLIST_NEXT(curelm, field) =                         \
-            SLIST_NEXT(SLIST_NEXT(curelm, field), field);   \
+        while (SLIST_NEXT(curelm, field) &&                 \
+               SLIST_NEXT(curelm, field) != (elm)) {        \
+              curelm = SLIST_NEXT(curelm, field);           \
+        }                                                   \
+        SLIST_NEXT(curelm, field) = SLIST_NEXT(elm, field); \
     }                                                       \
 } while (0)