aboutsummaryrefslogtreecommitdiffstats
path: root/main/openvswitch/0001-ovs-thread-Set-stacksize-to-1M.patch
blob: 2a7ae57b301bb047e941c58b41a113b3b4837528 (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
From 92ae6e162812876c082fd9d05a0eeac062f832ae Mon Sep 17 00:00:00 2001
From: Natanael Copa <ncopa@alpinelinux.org>
Date: Mon, 25 Aug 2014 08:50:26 +0000
Subject: [PATCH] ovs-thread: Set stacksize to 1M

With musl libc the default stacksize is 80k which is too small and
makes it segfault.

We increase it to 1MB.
http://permalink.gmane.org/gmane.linux.network.openvswitch.general/5831

Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
---
 lib/ovs-thread.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff -ru openvswitch-2.3.0.orig/lib/ovs-thread.c openvswitch-2.3.0/lib/ovs-thread.c
--- openvswitch-2.3.0.orig/lib/ovs-thread.c	2014-10-02 14:37:47.196714056 -0300
+++ openvswitch-2.3.0/lib/ovs-thread.c	2014-10-02 14:38:10.826714288 -0300
@@ -28,6 +28,9 @@
 #include "socket-util.h"
 #include "util.h"
 
+/* set default stack size to 1M */
+#define OVS_STACK_SIZE (1024 * 1024)
+
 #ifdef __CHECKER__
 /* Omit the definitions in this file because they are somewhat difficult to
  * write without prompting "sparse" complaints, without ugliness or
@@ -329,6 +332,7 @@
 {
     struct ovsthread_aux *aux;
     pthread_t thread;
+    pthread_attr_t attr;
     int error;
 
     forbid_forking("multiple threads exist");
@@ -340,10 +344,21 @@
     aux->arg = arg;
     ovs_strlcpy(aux->name, name, sizeof aux->name);
 
-    error = pthread_create(&thread, NULL, ovsthread_wrapper, aux);
+    error = pthread_attr_init(&attr);
+    if (error) {
+        ovs_abort(error, "pthread_attr_init failed");
+    }
+    error = pthread_attr_setstacksize(&attr, OVS_STACK_SIZE);
+    if (error) {
+        ovs_abort(error, "pthread_attr_setstacksize failed");
+    }
+
+    error = pthread_create(&thread, &attr, ovsthread_wrapper, aux);
     if (error) {
         ovs_abort(error, "pthread_create failed");
     }
+    pthread_attr_destroy(&attr);
+
     return thread;
 }