| Index: base/platform_thread_posix.cc
|
| diff --git a/base/platform_thread_posix.cc b/base/platform_thread_posix.cc
|
| index 66f39282703bea896796ff3509c32e81cfafd45f..e442e9c4571b38859597a68cf1ed3a376271b222 100644
|
| --- a/base/platform_thread_posix.cc
|
| +++ b/base/platform_thread_posix.cc
|
| @@ -7,6 +7,11 @@
|
| #include <errno.h>
|
| #include <sched.h>
|
|
|
| +#include "base/logging.h"
|
| +#include "base/safe_strerror_posix.h"
|
| +#include "base/scoped_ptr.h"
|
| +#include "base/thread_restrictions.h"
|
| +
|
| #if defined(OS_MACOSX)
|
| #include <mach/mach.h>
|
| #include <sys/resource.h>
|
| @@ -24,18 +29,27 @@
|
| #include <sys/nacl_syscalls.h>
|
| #endif
|
|
|
| -#include "base/logging.h"
|
| -#include "base/safe_strerror_posix.h"
|
| -
|
| #if defined(OS_MACOSX)
|
| namespace base {
|
| void InitThreading();
|
| } // namespace base
|
| #endif
|
|
|
| -static void* ThreadFunc(void* closure) {
|
| - PlatformThread::Delegate* delegate =
|
| - static_cast<PlatformThread::Delegate*>(closure);
|
| +namespace {
|
| +
|
| +struct ThreadParams {
|
| + PlatformThread::Delegate* delegate;
|
| + bool joinable;
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +static void* ThreadFunc(void* params) {
|
| + ThreadParams* thread_params = static_cast<ThreadParams*>(params);
|
| + PlatformThread::Delegate* delegate = thread_params->delegate;
|
| + if (!thread_params->joinable)
|
| + base::ThreadRestrictions::SetSingletonAllowed(false);
|
| + delete thread_params;
|
| delegate->ThreadMain();
|
| return NULL;
|
| }
|
| @@ -174,9 +188,14 @@ bool CreateThread(size_t stack_size, bool joinable,
|
| if (stack_size > 0)
|
| pthread_attr_setstacksize(&attributes, stack_size);
|
|
|
| - success = !pthread_create(thread_handle, &attributes, ThreadFunc, delegate);
|
| + ThreadParams* params = new ThreadParams;
|
| + params->delegate = delegate;
|
| + params->joinable = joinable;
|
| + success = !pthread_create(thread_handle, &attributes, ThreadFunc, params);
|
|
|
| pthread_attr_destroy(&attributes);
|
| + if (!success)
|
| + delete params;
|
| return success;
|
| }
|
|
|
|
|