fix possible issue of deadlock with geometry cleaner
This commit is contained in:
@@ -245,7 +245,8 @@ public class AsyncNodeManager {
|
|||||||
|
|
||||||
//Limit uploading as well as by geometry capacity being available
|
//Limit uploading as well as by geometry capacity being available
|
||||||
// must have 50 mb of free geometry space to upload
|
// must have 50 mb of free geometry space to upload
|
||||||
for (int limit = 0; limit < 200 && (this.geometryCapacity-this.geometryManager.getGeometryUsedBytes())>50_000_000; limit++)
|
boolean hasGeometryCapacity = true;
|
||||||
|
for (int limit = 0; limit < 200 && (hasGeometryCapacity=(this.geometryCapacity-this.geometryManager.getGeometryUsedBytes())>50_000_000); limit++)
|
||||||
{
|
{
|
||||||
var job = this.geometryUpdateQueue.poll();
|
var job = this.geometryUpdateQueue.poll();
|
||||||
if (job == null)
|
if (job == null)
|
||||||
@@ -314,6 +315,11 @@ public class AsyncNodeManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (workDone == 0) {//Nothing happened, which is odd, but just return
|
if (workDone == 0) {//Nothing happened, which is odd, but just return
|
||||||
|
//we need to do an unsafe hack here
|
||||||
|
if (!hasGeometryCapacity) {
|
||||||
|
this.usedGeometryAmount = this.geometryManager.getGeometryUsedBytes();
|
||||||
|
VarHandle.fullFence();
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//=====================
|
//=====================
|
||||||
@@ -749,6 +755,7 @@ public class AsyncNodeManager {
|
|||||||
|
|
||||||
public void addDebug(List<String> debug) {
|
public void addDebug(List<String> debug) {
|
||||||
debug.add("UC/GC: " + (this.getUsedGeometryCapacity()/(1<<20))+"/"+(this.getGeometryCapacity()/(1<<20)));
|
debug.add("UC/GC: " + (this.getUsedGeometryCapacity()/(1<<20))+"/"+(this.getGeometryCapacity()/(1<<20)));
|
||||||
|
//debug.add("GUQ/NRC: " + this.geometryUpdateQueue.size()+"/"+this.removeBatchQueue.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasWork() {
|
public boolean hasWork() {
|
||||||
|
|||||||
Reference in New Issue
Block a user