use global sync for all tiles managed in TileSets

TODO should be removed together TileRenderer.getVisibleTiles()
This commit is contained in:
Hannes Janetzek 2014-09-16 05:16:32 +02:00
parent 0c245f4f6d
commit c311004bd8

View File

@ -52,17 +52,20 @@ public final class TileSet {
* Call releaseTiles() when tiles are not needed any longer. * Call releaseTiles() when tiles are not needed any longer.
*/ */
public void lockTiles() { public void lockTiles() {
for (int i = 0; i < cnt; i++) synchronized (TileSet.class) {
tiles[i].lock(); for (int i = 0; i < cnt; i++)
tiles[i].lock();
}
} }
/** /**
* Release locked tiles. * Release locked tiles.
*/ */
public void releaseTiles() { public void releaseTiles() {
for (int i = 0; i < cnt; i++) synchronized (TileSet.class) {
tiles[i].unlock(); for (int i = 0; i < cnt; i++)
tiles[i].unlock();
}
Arrays.fill(tiles, null); Arrays.fill(tiles, null);
cnt = 0; cnt = 0;
serial = 0; serial = 0;
@ -73,10 +76,10 @@ public final class TileSet {
* new tiles. * new tiles.
*/ */
public void setTiles(TileSet source) { public void setTiles(TileSet source) {
//lock tiles (and their proxies) to not be removed from cache /* lock tiles (and their proxies) to not be removed from cache */
source.lockTiles(); source.lockTiles();
// unlock previous tiles /* unlock previous tiles */
releaseTiles(); releaseTiles();
if (source.tiles.length != tiles.length) { if (source.tiles.length != tiles.length) {