diff -r 2c63c486cc96 java.source/src/org/netbeans/modules/java/source/usages/RepositoryUpdater.java --- a/java.source/src/org/netbeans/modules/java/source/usages/RepositoryUpdater.java Thu Dec 11 11:12:03 2008 +0100 +++ b/java.source/src/org/netbeans/modules/java/source/usages/RepositoryUpdater.java Thu Dec 11 11:21:07 2008 +0100 @@ -617,6 +617,7 @@ if (!noscan) { synchronized (this) { this.noSubmited++; + LOGGER.log(Level.WARNING, "submit()+: " + this.noSubmited); } final CompileWorker cw = new CompileWorker (work); JavaSource.Priority p; @@ -771,8 +772,14 @@ Reference taskRef = url2CompileWithDepsTask.get(root); Task t = taskRef != null ? taskRef.get() : null; Collection storedFiles; + Boolean can = null; + + LOGGER.log(Level.WARNING, "t: " + t); - if (t == null || !t.cancel()) { + if (t == null || (can = !t.cancel())) { + if (can != null) { + LOGGER.log(Level.WARNING, "canceling: " + System.identityHashCode(t) + ", " + can); + } if (lockRU == 0 || t != null) { storedFiles = new LinkedHashSet(); url2CompileWithDeps.put(root, storedFiles); @@ -788,6 +795,7 @@ //the task either does not exist, or has been already started - create new one: LOGGER.log(Level.FINER, "creating a new task for root: {0}", root.toExternalForm()); final Collection storedFilesFin = storedFiles; + final Task[] tt = new Task[1]; t = WORKER.create(new Runnable() { public void run() { synchronized (RepositoryUpdater.this) { @@ -795,25 +803,50 @@ } submit(Work.compileWithDeps(root, storedFilesFin)); noSubmited--; + LOGGER.log(Level.WARNING, "assureCompiledWithDeps-: " + noSubmited + ":" + System.identityHashCode(tt[0])); } }); - url2CompileWithDepsTask.put(root, new WeakReference(t)); + tt[0] = t; + class WR extends WeakReference implements Runnable { + + long l; + public WR(Task t) { + super(t, Utilities.activeReferenceQueue()); + l = System.identityHashCode(t); + } + + public void run() { + LOGGER.log(Level.WARNING, "GCing: " + l); + } + + } + url2CompileWithDepsTask.put(root, new WR(t)); compileScheduled++; - noSubmited++; + LOGGER.log(Level.WARNING, "assureCompiledWithDeps+: " + noSubmited + ":" + System.identityHashCode(t)); } else { url2CompileWithDepsTask.remove(root); } } else { storedFiles = url2CompileWithDeps.get(root); + if (can != null) { + LOGGER.log(Level.WARNING, "2. canceling: " + System.identityHashCode(t) + ", " + can); + } + if (t != null) { + noSubmited--; + } } assert storedFiles != null; storedFiles.add(file); - + + LOGGER.log(Level.WARNING, "lockRU: " + lockRU); + if (lockRU > 0) { compileWithDepsToBeScheduled = true; } else { + LOGGER.log(Level.WARNING, "scheduling: " + System.identityHashCode(t)); + noSubmited++; t.schedule(DELAY); } } @@ -914,9 +947,11 @@ public void run() { submit(Work.compileWithDeps(root, storedFilesFin)); noSubmited--; + LOGGER.log(Level.WARNING, "unlockRU-: " + noSubmited); } }); noSubmited++; + LOGGER.log(Level.WARNING, "unlockRU+: " + noSubmited); url2CompileWithDepsTask.put(root, new WeakReference(t)); } @@ -1302,7 +1337,7 @@ boolean continuation = false; try { final WorkType type = work.getType(); - LOGGER.finer ("Request for: " + type); //NOI18N + LOGGER.warning("Request for: " + type); //NOI18N switch (type) { case FILTER_CHANGED: { @@ -1614,6 +1649,7 @@ if (!continuation) { synchronized (RepositoryUpdater.this) { RepositoryUpdater.this.noSubmited--; + LOGGER.log(Level.WARNING, "compileWorker.run()-: " + noSubmited); if (RepositoryUpdater.this.noSubmited == 0) { RepositoryUpdater.this.notifyAll(); }