Skip to content
Browse files

PTHREAD_MUTEX_DEFINE(): don't store into the _k_mutex section

The _k_mutex linker section is used to gather instances of
struct k_mutex into a list so that init_mutex_module() could iterate
that list to perform runtime initialization tasks. In this case, we're
not defining a struct k_mutex but rather a struct pthread_mutex which is
a completely different structure. Not only those struct pthread_mutex
would be corrupted with unexpected data, but since they're not the
same size as struct k_mutex, the actual struct k_mutex instances that
follow in the list would be misaligned and get corrupted too.

There is nothing that requires runtime initialization in the static
definition of a struct pthread_mutex so let's remove the section

Signed-off-by: Nicolas Pitre <>
  • Loading branch information...
Nicolas Pitre authored and nashif committed Jun 3, 2019
1 parent 8ab2255 commit ca49d6a85776ed6a3fdfe3da61b54fbf25c05983
Showing with 1 addition and 2 deletions.
  1. +1 −2 include/posix/pthread.h
@@ -160,8 +160,7 @@ static inline int pthread_condattr_destroy(pthread_condattr_t *att)
* @param name Symbol name of the mutex
#define PTHREAD_MUTEX_DEFINE(name) \
struct pthread_mutex name \
__in_section(_k_mutex, static, name) = \
struct pthread_mutex name = \
{ \
.lock_count = 0, \
.wait_q = Z_WAIT_Q_INIT(&name.wait_q), \

0 comments on commit ca49d6a

Please sign in to comment.
You can’t perform that action at this time.