RenderScript cts: Fix issues related to concurrency.
Use a volatile qualifier for msgHandled in RSBase, since the flag
is accessed by multiple threads at the same time.
Ensure that checkForErrors() is called after waitForMessage() to
avoid a race condition.
Change-Id: I6d3811f16003d891d79ad5efe9d6f34a50132576
(cherry picked from commit a73d4999fcb8433d6c8cdff0f2e22a5e2b538294)
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/ForEachTest.java b/tests/tests/renderscript/src/android/renderscript/cts/ForEachTest.java
index b90633e..38831f4 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/ForEachTest.java
+++ b/tests/tests/renderscript/src/android/renderscript/cts/ForEachTest.java
@@ -475,8 +475,8 @@
s.invoke_verify_foo();
s.invoke_foreach_test();
mRS.finish();
- checkForErrors();
waitForMessage();
+ checkForErrors();
}
public void testNoRoot() {
@@ -494,7 +494,7 @@
s.invoke_verify_foo();
s.invoke_noroot_test();
mRS.finish();
- checkForErrors();
waitForMessage();
+ checkForErrors();
}
}
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/KernelTest.java b/tests/tests/renderscript/src/android/renderscript/cts/KernelTest.java
index 64368b6..90d4fe9 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/KernelTest.java
+++ b/tests/tests/renderscript/src/android/renderscript/cts/KernelTest.java
@@ -475,8 +475,8 @@
s.invoke_verify_foo();
s.invoke_foreach_test();
mRS.finish();
- checkForErrors();
waitForMessage();
+ checkForErrors();
}
public void testNoRoot() {
@@ -494,7 +494,7 @@
s.invoke_verify_foo();
s.invoke_noroot_test();
mRS.finish();
- checkForErrors();
waitForMessage();
+ checkForErrors();
}
}
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/RSBase.java b/tests/tests/renderscript/src/android/renderscript/cts/RSBase.java
index 0175c38..2ca4f13 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/RSBase.java
+++ b/tests/tests/renderscript/src/android/renderscript/cts/RSBase.java
@@ -34,7 +34,9 @@
Resources mRes;
private int result;
- private boolean msgHandled;
+ // msgHandled is used to synchronize between waitForMessage() and the
+ // RSMessageHandler thread.
+ private volatile boolean msgHandled;
protected static final int RS_MSG_TEST_PASSED = 100;
protected static final int RS_MSG_TEST_FAILED = 101;
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/SampleTest.java b/tests/tests/renderscript/src/android/renderscript/cts/SampleTest.java
index bc69b0e..a468b9f 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/SampleTest.java
+++ b/tests/tests/renderscript/src/android/renderscript/cts/SampleTest.java
@@ -92,8 +92,8 @@
public void testNearest() {
mScript.invoke_test_RGBA(mAlloc_RGBA_1D, mAlloc_RGBA_2D);
mRS.finish();
- checkForErrors();
waitForMessage();
+ checkForErrors();
}
}