From e53da0b1bf2652896bed7b65929a1d8d0729d922 Mon Sep 17 00:00:00 2001 From: Wan-Teh Chang Date: Thu, 27 Aug 2020 20:49:03 -0700 Subject: [PATCH] Ensure thread stack size is at least 256 KB BUG=aomedia:2754 Change-Id: Ia6e211f9b87bc2efe376e7b9f4adb11741850b18 --- diff --git a/aom_util/aom_thread.c b/aom_util/aom_thread.c index a749a22..8411569 100644 --- a/aom_util/aom_thread.c +++ b/aom_util/aom_thread.c @@ -133,16 +133,39 @@ goto Error; } if (pthread_cond_init(&worker->impl_->condition_, NULL)) { - pthread_mutex_destroy(&worker->impl_->mutex_); - goto Error; + goto Error1; } + pthread_attr_t *attr = NULL; +#if HAVE_PTHREAD_H + pthread_attr_t thread_attributes; + attr = &thread_attributes; + if (pthread_attr_init(attr)) { + goto Error2; + } + size_t stack_size; + if (pthread_attr_getstacksize(attr, &stack_size)) { + pthread_attr_destroy(attr); + goto Error2; + } + const size_t kMinStackSize = 256 * 1024; + if (stack_size < kMinStackSize && + pthread_attr_setstacksize(attr, kMinStackSize)) { + pthread_attr_destroy(attr); + goto Error2; + } +#endif // HAVE_PTHREAD_H pthread_mutex_lock(&worker->impl_->mutex_); - ok = !pthread_create(&worker->impl_->thread_, NULL, thread_loop, worker); + ok = !pthread_create(&worker->impl_->thread_, attr, thread_loop, worker); if (ok) worker->status_ = OK; pthread_mutex_unlock(&worker->impl_->mutex_); +#if HAVE_PTHREAD_H + pthread_attr_destroy(attr); +#endif if (!ok) { - pthread_mutex_destroy(&worker->impl_->mutex_); + Error2: pthread_cond_destroy(&worker->impl_->condition_); + Error1: + pthread_mutex_destroy(&worker->impl_->mutex_); Error: aom_free(worker->impl_); worker->impl_ = NULL; diff --git a/aom_util/aom_thread.h b/aom_util/aom_thread.h index 8d04312..efbed78 100644 --- a/aom_util/aom_thread.h +++ b/aom_util/aom_thread.h @@ -32,6 +32,7 @@ #include // NOLINT #include // NOLINT typedef HANDLE pthread_t; +typedef int pthread_attr_t; typedef CRITICAL_SECTION pthread_mutex_t; #if _WIN32_WINNT < 0x0600 @@ -147,6 +148,7 @@ #include // NOLINT #define pthread_t TID +#define pthread_attr_t int #define pthread_mutex_t HMTX typedef struct {