Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 16 Aug 2014 08:38:53 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r270040 - stable/10/lib/libthr/thread
Message-ID:  <201408160838.s7G8crTM013850@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Sat Aug 16 08:38:53 2014
New Revision: 270040
URL: http://svnweb.freebsd.org/changeset/base/270040

Log:
  MFC r269909:
  Add a knob LIBPTHREAD_BIGSTACK_MAIN, which instructs libthr to leave
  the whole RLIMIT_STACK-sized region of the kernel-allocated stack as
  the stack of main thread.

Modified:
  stable/10/lib/libthr/thread/thr_init.c
  stable/10/lib/libthr/thread/thr_stack.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/lib/libthr/thread/thr_init.c
==============================================================================
--- stable/10/lib/libthr/thread/thr_init.c	Sat Aug 16 08:37:13 2014	(r270039)
+++ stable/10/lib/libthr/thread/thr_init.c	Sat Aug 16 08:38:53 2014	(r270040)
@@ -37,6 +37,7 @@
 #include <sys/types.h>
 #include <sys/signalvar.h>
 #include <sys/ioctl.h>
+#include <sys/resource.h>
 #include <sys/sysctl.h>
 #include <sys/ttycom.h>
 #include <sys/mman.h>
@@ -441,6 +442,7 @@ init_main_thread(struct pthread *thread)
 static void
 init_private(void)
 {
+	struct rlimit rlim;
 	size_t len;
 	int mib[2];
 	char *env;
@@ -471,6 +473,12 @@ init_private(void)
 		len = sizeof (_usrstack);
 		if (sysctl(mib, 2, &_usrstack, &len, NULL, 0) == -1)
 			PANIC("Cannot get kern.usrstack from sysctl");
+		env = getenv("LIBPTHREAD_BIGSTACK_MAIN");
+		if (env != NULL) {
+			if (getrlimit(RLIMIT_STACK, &rlim) == -1)
+				PANIC("Cannot get stack rlimit");
+			_thr_stack_initial = rlim.rlim_cur;
+		}
 		len = sizeof(_thr_is_smp);
 		sysctlbyname("kern.smp.cpus", &_thr_is_smp, &len, NULL, 0);
 		_thr_is_smp = (_thr_is_smp > 1);

Modified: stable/10/lib/libthr/thread/thr_stack.c
==============================================================================
--- stable/10/lib/libthr/thread/thr_stack.c	Sat Aug 16 08:37:13 2014	(r270039)
+++ stable/10/lib/libthr/thread/thr_stack.c	Sat Aug 16 08:38:53 2014	(r270040)
@@ -246,7 +246,10 @@ _thr_stack_alloc(struct pthread_attr *at
 		THREAD_LIST_UNLOCK(curthread);
 	}
 	else {
-		/* Allocate a stack from usrstack. */
+		/*
+		 * Allocate a stack from or below usrstack, depending
+		 * on the LIBPTHREAD_BIGSTACK_MAIN env variable.
+		 */
 		if (last_stack == NULL)
 			last_stack = _usrstack - _thr_stack_initial -
 			    _thr_guard_default;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201408160838.s7G8crTM013850>