Fix occasional deadlock caused by checkpoint root marking.
There was a race where a new worker thread would attach during the
checkpoint. This caused the thread to wait since suspend count != 0.
But when we decremented the suspend count, we did not broadcast to
the resume condition.
Added a create peer parameter to Thread::Attach and
AttachCurrentThread. This is used by the threadpool since we don't
need a java peer for worker threads.
Change-Id: I632926b5a6b52eeb0684b6e1dcbf3db42ba3d35c
diff --git a/src/thread.h b/src/thread.h
index d281ea2..84b88f2 100644
--- a/src/thread.h
+++ b/src/thread.h
@@ -117,7 +117,8 @@
// Attaches the calling native thread to the runtime, returning the new native peer.
// Used to implement JNI AttachCurrentThread and AttachCurrentThreadAsDaemon calls.
- static Thread* Attach(const char* thread_name, bool as_daemon, jobject thread_group);
+ static Thread* Attach(const char* thread_name, bool as_daemon, jobject thread_group,
+ bool create_peer);
// Reset internal state of child thread after fork.
void InitAfterFork();