summaryrefslogtreecommitdiff
path: root/deps/uv/src/unix/thread.c
diff options
context:
space:
mode:
Diffstat (limited to 'deps/uv/src/unix/thread.c')
-rw-r--r--deps/uv/src/unix/thread.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/deps/uv/src/unix/thread.c b/deps/uv/src/unix/thread.c
index 8bcb857610..c17a51fed2 100644
--- a/deps/uv/src/unix/thread.c
+++ b/deps/uv/src/unix/thread.c
@@ -194,13 +194,34 @@ static size_t thread_stack_size(void) {
int uv_thread_create(uv_thread_t *tid, void (*entry)(void *arg), void *arg) {
+ uv_thread_options_t params;
+ params.flags = UV_THREAD_NO_FLAGS;
+ return uv_thread_create_ex(tid, &params, entry, arg);
+}
+
+int uv_thread_create_ex(uv_thread_t* tid,
+ const uv_thread_options_t* params,
+ void (*entry)(void *arg),
+ void *arg) {
int err;
- size_t stack_size;
pthread_attr_t* attr;
pthread_attr_t attr_storage;
+ size_t pagesize;
+ size_t stack_size;
+
+ stack_size =
+ params->flags & UV_THREAD_HAS_STACK_SIZE ? params->stack_size : 0;
attr = NULL;
- stack_size = thread_stack_size();
+ if (stack_size == 0) {
+ stack_size = thread_stack_size();
+ } else {
+ pagesize = (size_t)getpagesize();
+ /* Round up to the nearest page boundary. */
+ stack_size = (stack_size + pagesize - 1) &~ (pagesize - 1);
+ if (stack_size < PTHREAD_STACK_MIN)
+ stack_size = PTHREAD_STACK_MIN;
+ }
if (stack_size > 0) {
attr = &attr_storage;