summaryrefslogtreecommitdiff
path: root/extra/aom/fix-stack-size-e53da0b.patch
blob: d8206e8d05c571059a46bd455e7caa272e7e5420 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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 {