public void discardTaskProducing( final ValueSpecification valueSpecification, final ResolveTask task) { do { final MapEx<ResolveTask, ResolvedValueProducer> tasks = getBuilder().getTasks(valueSpecification); if (tasks != null) { final ResolvedValueProducer producer; synchronized (tasks) { if (tasks.containsKey(null)) { continue; } producer = (ResolvedValueProducer) tasks.remove(task); if (producer == null) { // Wasn't in the set return; } } producer.release(this); } return; } while (true); }