Program: 50308
Project: 50308
Buggy source:
protected Object getRedoAwareResult(){
  Object result=waitAndGetResult();
  if (result == OBJECT_REDO) {
    request.redoCount++;
    if (request.redoCount > 19 && (request.redoCount % 10 == 0)) {
      final CountDownLatch l=new CountDownLatch(1);
      final Request reqCopy=request.hardCopy();
      reqCopy.redoCount=request.redoCount;
      final Address targetCopy=getTarget();
      enqueueAndReturn(new Processable(){
        public void process(){
          StringBuffer sb=new StringBuffer();
          Connection targetConnection=null;
          MemberImpl targetMember=null;
          Object key=toObject(reqCopy.key);
          Block block=(reqCopy.key == null) ? null : node.concurrentMapManager.getOrCreateBlock(reqCopy.key);
          if (targetCopy != null) {
            targetMember=getMember(targetCopy);
            targetConnection=node.connectionManager.getConnection(targetCopy);
            if (targetMember != null) {
              if (!lsMembers.contains(targetMember)) {
                logger.log(Level.SEVERE,targetMember + "String_Node_Str");
              }
            }
          }
          sb.append("String_Node_Str" + reqCopy.callId + "String_Node_Str"+ reqCopy.operation+ "String_Node_Str");
          sb.append("String_Node_Str");
          sb.append("String_Node_Str" + thisAddress + "String_Node_Str"+ targetCopy);
          sb.append("String_Node_Str");
          sb.append("String_Node_Str" + targetMember + "String_Node_Str"+ targetConnection+ "String_Node_Str"+ block);
          sb.append("String_Node_Str");
          sb.append(key + "String_Node_Str" + reqCopy.redoCount+ "String_Node_Str"+ reqCopy.name);
          logger.log(Level.INFO,sb.toString());
          l.countDown();
        }
      }
);
      try {
        l.await();
      }
 catch (      InterruptedException e) {
      }
    }
    try {
      Thread.sleep(redoWaitMillis);
    }
 catch (    InterruptedException e) {
      throw new RuntimeException(e);
    }
    beforeRedo();
    doOp();
    return getResult();
  }
  return result;
}

Fixed version (ground truth):
protected Object getRedoAwareResult(){
  Object result=waitAndGetResult();
  if (Thread.interrupted()) {
    handleInterruptedException();
  }
  if (result == OBJECT_REDO) {
    request.redoCount++;
    if (request.redoCount > 19 && (request.redoCount % 10 == 0)) {
      final CountDownLatch l=new CountDownLatch(1);
      final Request reqCopy=request.hardCopy();
      reqCopy.redoCount=request.redoCount;
      final Address targetCopy=getTarget();
      enqueueAndReturn(new Processable(){
        public void process(){
          StringBuffer sb=new StringBuffer();
          Connection targetConnection=null;
          MemberImpl targetMember=null;
          Object key=toObject(reqCopy.key);
          Block block=(reqCopy.key == null) ? null : node.concurrentMapManager.getOrCreateBlock(reqCopy.key);
          if (targetCopy != null) {
            targetMember=getMember(targetCopy);
            targetConnection=node.connectionManager.getConnection(targetCopy);
            if (targetMember != null) {
              if (!lsMembers.contains(targetMember)) {
                logger.log(Level.SEVERE,targetMember + "String_Node_Str");
              }
            }
          }
          sb.append("String_Node_Str" + reqCopy.callId + "String_Node_Str"+ reqCopy.operation+ "String_Node_Str");
          sb.append("String_Node_Str");
          sb.append("String_Node_Str" + thisAddress + "String_Node_Str"+ targetCopy);
          sb.append("String_Node_Str");
          sb.append("String_Node_Str" + targetMember + "String_Node_Str"+ targetConnection+ "String_Node_Str"+ block);
          sb.append("String_Node_Str");
          sb.append(key + "String_Node_Str" + reqCopy.redoCount+ "String_Node_Str"+ reqCopy.name);
          logger.log(Level.INFO,sb.toString());
          l.countDown();
        }
      }
);
      try {
        l.await();
      }
 catch (      InterruptedException e) {
        handleInterruptedException();
      }
    }
    try {
      Thread.sleep(redoWaitMillis);
    }
 catch (    InterruptedException e) {
      handleInterruptedException();
    }
    beforeRedo();
    doOp();
    return getResult();
  }
  return result;
}