Program: 50003
Project: 50003
Buggy source:
public final void run(){
  try {
    while (live) {
      threadWatcher.incrementRunCount();
      long currentMillis=System.currentTimeMillis();
      if ((currentMillis - lastPublish) > TEN_SECOND_MILLIS) {
        publishUtilization();
        lastPublish=currentMillis;
      }
      processSelectionQueue();
      if (!live)       return;
      int selectedKeyCount;
      try {
        long startWait=System.nanoTime();
        selectedKeyCount=selector.select(waitTime);
        long now=System.nanoTime();
        threadWatcher.addWait((now - startWait),now);
        if (Thread.interrupted()) {
          node.handleInterruptedException(Thread.currentThread(),new RuntimeException());
          return;
        }
      }
 catch (      Throwable exp) {
        continue;
      }
      if (selectedKeyCount == 0) {
        continue;
      }
      final Set<SelectionKey> setSelectedKeys=selector.selectedKeys();
      final Iterator<SelectionKey> it=setSelectedKeys.iterator();
      while (it.hasNext()) {
        final SelectionKey sk=it.next();
        it.remove();
        try {
          if (sk.isValid()) {
            sk.interestOps(sk.interestOps() & ~sk.readyOps());
            SelectionHandler selectionHandler=(SelectionHandler)sk.attachment();
            selectionHandler.handle();
          }
        }
 catch (        CancelledKeyException e) {
        }
catch (        Throwable e) {
          handleSelectorException(e);
        }
      }
    }
  }
 catch (  OutOfMemoryError e) {
    node.onOutOfMemory(e);
  }
catch (  Throwable e) {
    logger.log(Level.WARNING,"String_Node_Str" + Thread.currentThread().getName(),e);
  }
 finally {
    try {
      logger.log(Level.FINE,"String_Node_Str" + Thread.currentThread().getName());
      selector.close();
    }
 catch (    final Exception ignored) {
    }
  }
}

Fixed version (ground truth):
public final void run(){
  try {
    while (live) {
      threadWatcher.incrementRunCount();
      long currentMillis=System.currentTimeMillis();
      if ((currentMillis - lastPublish) > TEN_SECOND_MILLIS) {
        publishUtilization();
        lastPublish=currentMillis;
      }
      processSelectionQueue();
      if (!live)       return;
      int selectedKeyCount;
      try {
        long startWait=System.nanoTime();
        selectedKeyCount=selector.select(waitTime);
        long now=System.nanoTime();
        threadWatcher.addWait((now - startWait),now);
        if (Thread.interrupted()) {
          node.handleInterruptedException(Thread.currentThread(),new RuntimeException());
          return;
        }
      }
 catch (      Throwable exp) {
        continue;
      }
      if (selectedKeyCount == 0) {
        continue;
      }
      final Set<SelectionKey> setSelectedKeys=selector.selectedKeys();
      final Iterator<SelectionKey> it=setSelectedKeys.iterator();
      while (it.hasNext()) {
        final SelectionKey sk=it.next();
        it.remove();
        try {
          if (sk.isValid()) {
            if (!sk.isReadable())             sk.interestOps(sk.interestOps() & ~sk.readyOps());
            SelectionHandler selectionHandler=(SelectionHandler)sk.attachment();
            selectionHandler.handle();
          }
 else {
            logger.log(Level.WARNING,sk.isWritable() + "String_Node_Str" + Thread.currentThread().getName());
          }
        }
 catch (        CancelledKeyException e) {
          logger.log(Level.WARNING,"String_Node_Str" + Thread.currentThread().getName(),e);
        }
catch (        Throwable e) {
          handleSelectorException(e);
        }
      }
    }
  }
 catch (  OutOfMemoryError e) {
    node.onOutOfMemory(e);
  }
catch (  Throwable e) {
    logger.log(Level.WARNING,"String_Node_Str" + Thread.currentThread().getName(),e);
  }
 finally {
    try {
      logger.log(Level.FINE,"String_Node_Str" + Thread.currentThread().getName());
      selector.close();
    }
 catch (    final Exception ignored) {
    }
  }
}