| Index: content/child/child_thread.cc
|
| ===================================================================
|
| --- content/child/child_thread.cc (revision 260245)
|
| +++ content/child/child_thread.cc (working copy)
|
| @@ -70,50 +70,6 @@
|
| // plugins), PluginThread has EnsureTerminateMessageFilter.
|
| #if defined(OS_POSIX)
|
|
|
| -// A thread delegate that waits for |duration| and then signals the process
|
| -// with SIGALRM.
|
| -class WaitAndExitDelegate : public base::PlatformThread::Delegate {
|
| - public:
|
| - explicit WaitAndExitDelegate(base::TimeDelta duration)
|
| - : duration_(duration) {}
|
| - virtual ~WaitAndExitDelegate() OVERRIDE {}
|
| -
|
| - virtual void ThreadMain() OVERRIDE {
|
| - base::PlatformThread::Sleep(duration_);
|
| - // This used to be implemented with alarm(2). Make sure to not break
|
| - // anything that requires the process being signaled.
|
| - CHECK_EQ(0, raise(SIGALRM));
|
| -
|
| - base::PlatformThread::Sleep((base::TimeDelta::FromSeconds(10)));
|
| - // If something erroneously blocked SIGALRM, this will trigger.
|
| - NOTREACHED();
|
| - _exit(0);
|
| - }
|
| -
|
| - private:
|
| - const base::TimeDelta duration_;
|
| - DISALLOW_COPY_AND_ASSIGN(WaitAndExitDelegate);
|
| -};
|
| -
|
| -// This is similar to using alarm(2), except it will spawn a thread
|
| -// which will sleep for |duration| before raising SIGALRM.
|
| -bool CreateAlarmThread(base::TimeDelta duration) {
|
| - scoped_ptr<WaitAndExitDelegate> delegate(new WaitAndExitDelegate(duration));
|
| -
|
| - const bool thread_created = base::PlatformThread::CreateNonJoinable(
|
| - 0 /* stack_size */, delegate.get());
|
| - if (!thread_created)
|
| - return false;
|
| -
|
| - // A non joinable thread has been created. The thread will either terminate
|
| - // the process or will be terminated by the process. Therefore, keep the
|
| - // delegate object alive for the lifetime of the process.
|
| - WaitAndExitDelegate* leaking_delegate = delegate.release();
|
| - ANNOTATE_LEAKING_OBJECT_PTR(leaking_delegate);
|
| - ignore_result(leaking_delegate);
|
| - return true;
|
| -}
|
| -
|
| class SuicideOnChannelErrorFilter : public IPC::ChannelProxy::MessageFilter {
|
| public:
|
| // IPC::ChannelProxy::MessageFilter
|
| @@ -133,21 +89,7 @@
|
| //
|
| // So, we install a filter on the channel so that we can process this event
|
| // here and kill the process.
|
| - if (CommandLine::ForCurrentProcess()->
|
| - HasSwitch(switches::kChildCleanExit)) {
|
| - // If clean exit is requested, we want to kill this process after giving
|
| - // it 60 seconds to run exit handlers. Exit handlers may including ones
|
| - // that write profile data to disk (which happens under profile collection
|
| - // mode).
|
| - CHECK(CreateAlarmThread(base::TimeDelta::FromSeconds(60)));
|
| -#if defined(LEAK_SANITIZER)
|
| - // Invoke LeakSanitizer early to avoid detecting shutdown-only leaks. If
|
| - // leaks are found, the process will exit here.
|
| - __lsan_do_leak_check();
|
| -#endif
|
| - } else {
|
| - _exit(0);
|
| - }
|
| + _exit(0);
|
| }
|
|
|
| protected:
|
|
|