aboutsummaryrefslogtreecommitdiffstats
path: root/main/rsyslog/8e4bfe19b5d971f5df8520faf8753381b58e7ca7.patch
blob: c763780f1a1c676e259a6958d6ca380252dcc59e (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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
From 8e4bfe19b5d971f5df8520faf8753381b58e7ca7 Mon Sep 17 00:00:00 2001
From: Rainer Gerhards <rgerhards@adiscon.com>
Date: Fri, 29 Apr 2016 08:09:44 +0200
Subject: [PATCH] core: set default stack size to 4MiB

Note that this is below the usual 10MiB default, but should cause
no issues (output threads already use 4MiB stack size, for example).
This also addresses issues introduced by micro-libc's which only
provide very limited stack space by default.

closes https://github.com/rsyslog/rsyslog/issues/996
---
 runtime/rsyslog.c | 7 ++++---
 runtime/rsyslog.h | 2 +-
 runtime/stream.c  | 4 ----
 threads.c         | 9 +--------
 4 files changed, 6 insertions(+), 16 deletions(-)

diff --git a/runtime/rsyslog.c b/runtime/rsyslog.c
index c6d70d4..c23d9f7 100644
--- a/runtime/rsyslog.c
+++ b/runtime/rsyslog.c
@@ -35,7 +35,7 @@
  *
  * Module begun 2008-04-16 by Rainer Gerhards
  *
- * Copyright 2008-2014 Rainer Gerhards and Adiscon GmbH.
+ * Copyright 2008-2016 Rainer Gerhards and Adiscon GmbH.
  *
  * This file is part of the rsyslog runtime library.
  *
@@ -83,9 +83,9 @@
 #include "atomic.h"
 #include "srUtils.h"
 
+pthread_attr_t default_thread_attr;
 #ifdef HAVE_PTHREAD_SETSCHEDPARAM
 struct sched_param default_sched_param;
-pthread_attr_t default_thread_attr;
 int default_thr_sched_policy;
 #endif
 
@@ -145,11 +145,12 @@ rsrtInit(char **ppErrObj, obj_if_t *pObjIF)
 		stdlog_init(0);
 		stdlog_hdl = NULL;
 #endif
+		CHKiRet(pthread_attr_init(&default_thread_attr));
+		pthread_attr_setstacksize(&default_thread_attr, 4096*1024);
 #ifdef HAVE_PTHREAD_SETSCHEDPARAM
 	    	CHKiRet(pthread_getschedparam(pthread_self(),
 			    		      &default_thr_sched_policy,
 					      &default_sched_param));
-		CHKiRet(pthread_attr_init(&default_thread_attr));
 		CHKiRet(pthread_attr_setschedpolicy(&default_thread_attr,
 			    			    default_thr_sched_policy));
 		CHKiRet(pthread_attr_setschedparam(&default_thread_attr,
diff --git a/runtime/rsyslog.h b/runtime/rsyslog.h
index 542343d..87198f3 100644
--- a/runtime/rsyslog.h
+++ b/runtime/rsyslog.h
@@ -532,9 +532,9 @@ typedef enum rsObjectID rsObjID;
 #define RSFREEOBJ(x) {(x)->OID = OIDrsFreed; free(x);}
 #endif
 
+extern pthread_attr_t default_thread_attr;
 #ifdef HAVE_PTHREAD_SETSCHEDPARAM
 extern struct sched_param default_sched_param;
-extern pthread_attr_t default_thread_attr;
 extern int default_thr_sched_policy;
 #endif
 
diff --git a/runtime/stream.c b/runtime/stream.c
index ae3efaa..97b0ccd 100644
--- a/runtime/stream.c
+++ b/runtime/stream.c
@@ -968,11 +968,7 @@ static rsRetVal strmConstructFinalize(strm_t *pThis)
 		pThis->pIOBuf = pThis->asyncBuf[0].pBuf;
 		pThis->bStopWriter = 0;
 		if(pthread_create(&pThis->writerThreadID,
-#ifdef HAVE_PTHREAD_SETSCHEDPARAM
 			    	  &default_thread_attr,
-#else
-				  NULL,
-#endif
 				  asyncWriterThread, pThis) != 0)
 			DBGPRINTF("ERROR: stream %p cold not create writer thread\n", pThis);
 	} else {
diff --git a/threads.c b/threads.c
index b6cab1b..2d83402 100644
--- a/threads.c
+++ b/threads.c
@@ -235,7 +235,6 @@ static void* thrdStarter(void *arg)
 	ENDfunc
 	pthread_exit(0);
 }
-
 /* Start a new thread and add it to the list of currently
  * executing threads. It is added at the end of the list.
  * rgerhards, 2007-12-14
@@ -253,13 +252,7 @@ rsRetVal thrdCreate(rsRetVal (*thrdMain)(thrdInfo_t*), rsRetVal(*afterRun)(thrdI
 	pThis->pAfterRun = afterRun;
 	pThis->bNeedsCancel = bNeedsCancel;
 	pThis->name = ustrdup(name);
-	pthread_create(&pThis->thrdID,
-#ifdef HAVE_PTHREAD_SETSCHEDPARAM
-			   &default_thread_attr,
-#else
-			   NULL,
-#endif
-			   thrdStarter, pThis);
+	pthread_create(&pThis->thrdID, &default_thread_attr, thrdStarter, pThis);
 	CHKiRet(llAppend(&llThrds, NULL, pThis));
 
 finalize_it: