import java.util.HashMap;
import java.util.Map;
+import org.simantics.db.impl.BlockingAsyncProcedure;
import org.simantics.db.impl.query.CacheEntry;
import org.simantics.db.impl.query.QueryProcessor.SessionTask;
public class BarrierTracing {
- public static final boolean BOOKKEEPING = false;
+ private static final String KEY = "SIMANTICS_DB_IMPL_BARRIER_TRACING";
+
+ public static final boolean BOOKKEEPING = Boolean.parseBoolean(
+ System.getProperty("org.simantics.db.impl.barrierTracing",
+ System.getenv(KEY) != null ? System.getenv(KEY) : "false")
+ );
static final boolean RESTART_GUARD = BOOKKEEPING && false;
public static Map<SessionTask,Exception> tasks = new HashMap<>();
public static final HashMap<AsyncBarrierImpl, CacheEntry<?>> entryMap = new HashMap<>();
public static final HashMap<AsyncBarrierImpl, Throwable> restartMap = new HashMap<>();
public static final HashMap<AsyncBarrierImpl, Throwable> startMap = new HashMap<>();
+ public static final HashMap<BlockingAsyncProcedure, Throwable> baps = new HashMap<>();
+
+ synchronized public static void registerBAP(BlockingAsyncProcedure bap) {
+ baps.put(bap, new Exception());
+ }
+
+ synchronized public static void unregisterBAP(BlockingAsyncProcedure bap) {
+ baps.remove(bap);
+ }
+ synchronized public static void printBAPS() {
+ for(BlockingAsyncProcedure bap : baps.keySet()) {
+ bap.print();
+ Throwable t = baps.get(bap);
+ if(t != null)
+ t.printStackTrace();
+ }
+ }
+
public static void trace(AsyncBarrierImpl barrier, CacheEntry<?> entry) {
if (RESTART_GUARD) {