fix a potential race condition

Currently worker threads in computeBestConfiguration may NOT completely
finish before timeout.  But the code will start using the result while
the worker threads are still working on the same object.  This may
cause exceptions.

b/19966623

Change-Id: I62ffcb796d648891ee339b6a978f575ebad8352b
This commit is contained in:
Xiaohui Chen
2015-04-07 10:12:24 -07:00
parent cef55cde1c
commit ab7f01d51b

View File

@@ -415,12 +415,20 @@ public class AssetAtlasService extends IAssetAtlas.Stub {
new Thread(worker, "Atlas Worker #" + (i + 1)).start();
}
boolean isAllWorkerFinished;
try {
signal.await(10, TimeUnit.SECONDS);
isAllWorkerFinished = signal.await(10, TimeUnit.SECONDS);
} catch (InterruptedException e) {
Log.w(LOG_TAG, "Could not complete configuration computation");
return null;
}
if (!isAllWorkerFinished) {
// We have to abort here, otherwise the async updates on "results" would crash the
// sort later.
Log.w(LOG_TAG, "Could not complete configuration computation before timeout.");
return null;
}
}
// Maximize the number of packed bitmaps, minimize the texture size