diff --git a/platforms/common/px4_work_queue/WorkQueueManager.cpp b/platforms/common/px4_work_queue/WorkQueueManager.cpp index f32ea13d44..3569238bad 100644 --- a/platforms/common/px4_work_queue/WorkQueueManager.cpp +++ b/platforms/common/px4_work_queue/WorkQueueManager.cpp @@ -203,10 +203,16 @@ WorkQueueManagerRun(int, char **) } // stack size -#ifndef __PX4_QURT - const size_t stacksize = math::max(PTHREAD_STACK_MIN, PX4_STACK_ADJUSTED(wq->stacksize)); -#else +#if defined(__PX4_QURT) const size_t stacksize = math::max(8 * 1024, PX4_STACK_ADJUSTED(wq->stacksize)); +#elif defined(__PX4_NUTTX) + const size_t stacksize = math::max((uint16_t)PTHREAD_STACK_MIN, wq->stacksize); +#elif defined(__PX4_POSIX) + // On posix system , the desired stacksize round to the nearest multiplier of the system pagesize + // It is a requirement of the pthread_attr_setstacksize* function + const unsigned int page_size = sysconf(_SC_PAGESIZE); + const size_t stacksize_adj = math::max(PTHREAD_STACK_MIN, PX4_STACK_ADJUSTED(wq->stacksize)); + const size_t stacksize = (stacksize_adj + page_size - (stacksize_adj % page_size)); #endif int ret_setstacksize = pthread_attr_setstacksize(&attr, stacksize);