From 93db3d4bfd0062024a0cc05623e7e84df7313d86 Mon Sep 17 00:00:00 2001 From: Pirama Arumuga Nainar Date: Fri, 2 Oct 2015 12:06:10 -0700 Subject: Retry if interrupted before mMessageThread has joined Bug: 24342101 If interrupted during mMessageThread.join(), retry the join instead of assuming the thread has joined and continuing. Continuing to destroy the context will cause a segfault when the message thread attempts to use the destroyed context. Change-Id: I3213091a0e996449bceb403dffca3063786d5a65 (cherry picked from commit 2f25ce7753f7f1f6a0cc549a0df0082286bd5f85) --- rs/java/android/renderscript/RenderScript.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'rs') diff --git a/rs/java/android/renderscript/RenderScript.java b/rs/java/android/renderscript/RenderScript.java index 8b1a032..62ddc39 100644 --- a/rs/java/android/renderscript/RenderScript.java +++ b/rs/java/android/renderscript/RenderScript.java @@ -1557,9 +1557,16 @@ public class RenderScript { nContextDeinitToClient(mContext); mMessageThread.mRun = false; - try { - mMessageThread.join(); - } catch(InterruptedException e) { + + // Wait for mMessageThread to join. Try in a loop, in case this thread gets interrupted + // during the wait. + boolean hasJoined = false; + while (!hasJoined) { + try { + mMessageThread.join(); + hasJoined = true; + } catch(InterruptedException e) { + } } nContextDestroy(); -- cgit v1.1