File multipath-tools-set-stacksize-for-log-thread of Package multipath-tools

From 3687c051b5f7026c193121f0b88fb75f079d96d2 Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Fri, 13 Mar 2009 14:05:52 +0100
Subject: [PATCH] Set pthread stacksize for log thread correctly

Forgot to modify log pthread, too.

Signed-off-by: Hannes Reinecke <hare@suse.de>
---
 libmultipath/log_pthread.c |   25 ++++++++++++++++++++++---
 1 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/libmultipath/log_pthread.c b/libmultipath/log_pthread.c
index 9e9aebe..106326f 100644
--- a/libmultipath/log_pthread.c
+++ b/libmultipath/log_pthread.c
@@ -4,6 +4,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
+#include <limits.h>
 #include <pthread.h>
 #include <sys/mman.h>
 
@@ -53,9 +54,30 @@ static void * log_thread (void * et)
 void log_thread_start (void)
 {
 	pthread_attr_t attr;
+	size_t stacksize;
 
 	logdbg(stderr,"enter log_thread_start\n");
 
+	if (pthread_attr_init(&attr)) {
+		fprintf(stderr,"can't initialize log thread\n");
+		exit(1);
+	}
+
+	if (pthread_attr_getstacksize(&attr, &stacksize) != 0)
+		stacksize = PTHREAD_STACK_MIN;
+
+	/* Check if the stacksize is large enough */
+	if (stacksize < (64 * 1024))
+		stacksize = 64 * 1024;
+
+	/* Set stacksize and try to reinitialize attr if failed */
+	if (stacksize > PTHREAD_STACK_MIN &&
+	    pthread_attr_setstacksize(&attr, stacksize) != 0 &&
+	    pthread_attr_init(&attr)) {
+		fprintf(stderr,"can't set log thread stack size\n");
+		exit(1);
+	}
+
 	logq_lock = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t));
 	logev_lock = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t));
 	logev_cond = (pthread_cond_t *) malloc(sizeof(pthread_cond_t));
@@ -64,9 +86,6 @@ void log_thread_start (void)
 	pthread_mutex_init(logev_lock, NULL);
 	pthread_cond_init(logev_cond, NULL);
 
-	pthread_attr_init(&attr);
-	pthread_attr_setstacksize(&attr, 64 * 1024);
-
 	if (log_init("multipathd", 0)) {
 		fprintf(stderr,"can't initialize log buffer\n");
 		exit(1);
-- 
1.6.0.2

openSUSE Build Service is sponsored by