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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user