Only allow one requestGC at a time

Fixes possible deadlock caused by Thread.getAllStackTraces

Thread.getAllStackTraces suspends all of the threads. If one of
the threads is a thread which holds the GC daemon lock then we
may deadlock when we allocate the stack trace. This happens if we
get a concurrent GC request when we are allocating the stack trace
elements. To fix the deadlock we now only allow a single thread to
requestGC at the same time.

Credits: yamauchi, hboehm

Bug: 18661622

(cherry picked from commit c0b55b80df57b9f8c659a5af4525ceba271622b6)

Change-Id: Iba46cb9c6cd2503d7af3348b4478c8c53973b9ee
1 file changed