aboutsummaryrefslogtreecommitdiffstats
path: root/community/aom/fix-stack-size-e53da0b.patch
diff options
context:
space:
mode:
Diffstat (limited to 'community/aom/fix-stack-size-e53da0b.patch')
-rw-r--r--community/aom/fix-stack-size-e53da0b.patch78
1 files changed, 78 insertions, 0 deletions
diff --git a/community/aom/fix-stack-size-e53da0b.patch b/community/aom/fix-stack-size-e53da0b.patch
new file mode 100644
index 0000000000..d8206e8d05
--- /dev/null
+++ b/community/aom/fix-stack-size-e53da0b.patch
@@ -0,0 +1,78 @@
+From e53da0b1bf2652896bed7b65929a1d8d0729d922 Mon Sep 17 00:00:00 2001
+From: Wan-Teh Chang <wtc@google.com>
+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 <process.h> // NOLINT
+ #include <windows.h> // 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 <sys/builtin.h> // NOLINT
+
+ #define pthread_t TID
++#define pthread_attr_t int
+ #define pthread_mutex_t HMTX
+
+ typedef struct {