Program: 70285
Project: 70285
Buggy source:
public void obtainFileData(LogicalData ld,DataLocation source,DataLocation target,LogicalData tgtData,Transferable reason,EventListener listener){
  String targetPath=target.getURIInHost(Comm.getAppHost()).getPath();
  if (DEBUG) {
    LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str");
  }
  ld.lockHostRemoval();
  Collection<Copy> copiesInProgress=ld.getCopiesInProgress();
  if (copiesInProgress != null && !copiesInProgress.isEmpty()) {
    for (    Copy copy : copiesInProgress) {
      if (copy != null) {
        if (copy.getTargetLoc() != null && copy.getTargetLoc().getHosts().contains(Comm.getAppHost())) {
          if (DEBUG) {
            LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str");
          }
          waitForCopyTofinish(copy);
          try {
            if (DEBUG) {
              LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ copy.getFinalTarget()+ "String_Node_Str"+ targetPath);
            }
            Files.copy((new File(copy.getFinalTarget())).toPath(),new File(targetPath).toPath(),StandardCopyOption.REPLACE_EXISTING);
            if (tgtData != null) {
              tgtData.addLocation(target);
            }
            LOGGER.debug("String_Node_Str" + targetPath);
            reason.setDataTarget(targetPath);
            listener.notifyEnd(null);
            ld.releaseHostRemoval();
            return;
          }
 catch (          IOException ex) {
            ErrorManager.warn("String_Node_Str" + copy.getFinalTarget() + "String_Node_Str"+ targetPath+ "String_Node_Str",ex);
          }
        }
 else         if (copy.getTargetData() != null && copy.getTargetData().getAllHosts().contains(Comm.getAppHost())) {
          waitForCopyTofinish(copy);
          try {
            if (DEBUG) {
              LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ copy.getFinalTarget()+ "String_Node_Str"+ targetPath);
            }
            Files.copy((new File(copy.getFinalTarget())).toPath(),new File(targetPath).toPath(),StandardCopyOption.REPLACE_EXISTING);
            if (tgtData != null) {
              tgtData.addLocation(target);
            }
            LOGGER.debug("String_Node_Str" + targetPath);
            reason.setDataTarget(targetPath);
            listener.notifyEnd(null);
            ld.releaseHostRemoval();
            return;
          }
 catch (          IOException ex) {
            ErrorManager.warn("String_Node_Str" + copy.getFinalTarget() + "String_Node_Str"+ targetPath+ "String_Node_Str",ex);
          }
        }
 else {
          if (DEBUG) {
            LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str");
          }
        }
      }
    }
  }
  if (DEBUG) {
    LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ Comm.getAppHost().getName()+ "String_Node_Str");
  }
  for (  MultiURI u : ld.getURIs()) {
    if (DEBUG) {
      String hostname=(u.getHost() != null) ? u.getHost().getName() : "String_Node_Str";
      LOGGER.debug(ld.getName() + "String_Node_Str" + u.toString()+ "String_Node_Str"+ hostname+ "String_Node_Str");
    }
    if (u.getHost() == Comm.getAppHost()) {
      try {
        if (DEBUG) {
          LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ u.getHost().getName()+ "String_Node_Str"+ targetPath);
        }
        Files.copy((new File(u.getPath())).toPath(),new File(targetPath).toPath(),StandardCopyOption.REPLACE_EXISTING);
        if (tgtData != null) {
          tgtData.addLocation(target);
        }
        LOGGER.debug("String_Node_Str" + targetPath);
        reason.setDataTarget(targetPath);
        listener.notifyEnd(null);
        ld.releaseHostRemoval();
        return;
      }
 catch (      IOException ex) {
        ErrorManager.warn("String_Node_Str" + u.getPath() + "String_Node_Str"+ targetPath+ "String_Node_Str",ex);
      }
    }
 else {
      if (DEBUG) {
        String hostname=(u.getHost() != null) ? u.getHost().getName() : "String_Node_Str";
        LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ hostname+ "String_Node_Str");
      }
    }
  }
  if (source != null) {
    for (    Resource sourceRes : source.getHosts()) {
      COMPSsNode node=sourceRes.getNode();
      String sourcePath=source.getURIInHost(sourceRes).getPath();
      if (node != this) {
        try {
          if (DEBUG) {
            LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ sourcePath+ "String_Node_Str"+ targetPath);
          }
          node.sendData(ld,source,target,tgtData,reason,listener);
        }
 catch (        Exception e) {
          ErrorManager.warn("String_Node_Str" + targetPath,e);
          continue;
        }
        LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str");
        ld.releaseHostRemoval();
        return;
      }
 else {
        try {
          if (DEBUG) {
            LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ sourcePath+ "String_Node_Str"+ targetPath);
          }
          Files.copy(new File(sourcePath).toPath(),new File(targetPath).toPath(),StandardCopyOption.REPLACE_EXISTING);
          LOGGER.debug("String_Node_Str" + targetPath);
          reason.setDataTarget(targetPath);
          listener.notifyEnd(null);
          ld.releaseHostRemoval();
          return;
        }
 catch (        IOException ex) {
          ErrorManager.warn("String_Node_Str" + sourcePath + "String_Node_Str"+ targetPath,ex);
        }
      }
    }
  }
 else {
    LOGGER.debug("String_Node_Str");
  }
  for (  Resource sourceRes : ld.getAllHosts()) {
    COMPSsNode node=sourceRes.getNode();
    if (node != this) {
      try {
        LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ sourceRes.getName()+ "String_Node_Str"+ targetPath);
        node.sendData(ld,source,target,tgtData,reason,listener);
      }
 catch (      Exception e) {
        LOGGER.error("String_Node_Str",e);
        continue;
      }
      LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str");
      ld.releaseHostRemoval();
      return;
    }
 else {
      if (DEBUG) {
        LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ sourceRes.getName()+ "String_Node_Str");
      }
    }
  }
  ErrorManager.warn("String_Node_Str" + ld.getName() + "String_Node_Str"+ targetPath);
  ld.releaseHostRemoval();
}

Fixed version (ground truth):
public void obtainFileData(LogicalData ld,DataLocation source,DataLocation target,LogicalData tgtData,Transferable reason,EventListener listener){
  String targetPath=target.getURIInHost(Comm.getAppHost()).getPath();
  if (DEBUG) {
    LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str");
  }
  ld.lockHostRemoval();
  Collection<Copy> copiesInProgress=ld.getCopiesInProgress();
  if (copiesInProgress != null && !copiesInProgress.isEmpty()) {
    for (    Copy copy : copiesInProgress) {
      if (copy != null) {
        if (copy.getTargetLoc() != null && copy.getTargetLoc().getHosts().contains(Comm.getAppHost())) {
          if (DEBUG) {
            LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str");
          }
          Copy.waitForCopyTofinish(copy,this);
          try {
            if (DEBUG) {
              LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ copy.getFinalTarget()+ "String_Node_Str"+ targetPath);
            }
            Files.copy((new File(copy.getFinalTarget())).toPath(),new File(targetPath).toPath(),StandardCopyOption.REPLACE_EXISTING);
            if (tgtData != null) {
              tgtData.addLocation(target);
            }
            LOGGER.debug("String_Node_Str" + targetPath);
            reason.setDataTarget(targetPath);
            listener.notifyEnd(null);
            ld.releaseHostRemoval();
            return;
          }
 catch (          IOException ex) {
            ErrorManager.warn("String_Node_Str" + copy.getFinalTarget() + "String_Node_Str"+ targetPath+ "String_Node_Str",ex);
          }
        }
 else         if (copy.getTargetData() != null && copy.getTargetData().getAllHosts().contains(Comm.getAppHost())) {
          Copy.waitForCopyTofinish(copy,this);
          try {
            if (DEBUG) {
              LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ copy.getFinalTarget()+ "String_Node_Str"+ targetPath);
            }
            Files.copy((new File(copy.getFinalTarget())).toPath(),new File(targetPath).toPath(),StandardCopyOption.REPLACE_EXISTING);
            if (tgtData != null) {
              tgtData.addLocation(target);
            }
            LOGGER.debug("String_Node_Str" + targetPath);
            reason.setDataTarget(targetPath);
            listener.notifyEnd(null);
            ld.releaseHostRemoval();
            return;
          }
 catch (          IOException ex) {
            ErrorManager.warn("String_Node_Str" + copy.getFinalTarget() + "String_Node_Str"+ targetPath+ "String_Node_Str",ex);
          }
        }
 else {
          if (DEBUG) {
            LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str");
          }
        }
      }
    }
  }
  if (DEBUG) {
    LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ Comm.getAppHost().getName()+ "String_Node_Str");
  }
  for (  MultiURI u : ld.getURIs()) {
    if (DEBUG) {
      String hostname=(u.getHost() != null) ? u.getHost().getName() : "String_Node_Str";
      LOGGER.debug(ld.getName() + "String_Node_Str" + u.toString()+ "String_Node_Str"+ hostname+ "String_Node_Str");
    }
    if (u.getHost() == Comm.getAppHost()) {
      try {
        if (DEBUG) {
          LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ u.getHost().getName()+ "String_Node_Str"+ targetPath);
        }
        Files.copy((new File(u.getPath())).toPath(),new File(targetPath).toPath(),StandardCopyOption.REPLACE_EXISTING);
        if (tgtData != null) {
          tgtData.addLocation(target);
        }
        LOGGER.debug("String_Node_Str" + targetPath);
        reason.setDataTarget(targetPath);
        listener.notifyEnd(null);
        ld.releaseHostRemoval();
        return;
      }
 catch (      IOException ex) {
        ErrorManager.warn("String_Node_Str" + u.getPath() + "String_Node_Str"+ targetPath+ "String_Node_Str",ex);
      }
    }
 else {
      if (DEBUG) {
        String hostname=(u.getHost() != null) ? u.getHost().getName() : "String_Node_Str";
        LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ hostname+ "String_Node_Str");
      }
    }
  }
  if (source != null) {
    for (    Resource sourceRes : source.getHosts()) {
      COMPSsNode node=sourceRes.getNode();
      String sourcePath=source.getURIInHost(sourceRes).getPath();
      if (node != this) {
        try {
          if (DEBUG) {
            LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ sourcePath+ "String_Node_Str"+ targetPath);
          }
          node.sendData(ld,source,target,tgtData,reason,listener);
        }
 catch (        Exception e) {
          ErrorManager.warn("String_Node_Str" + targetPath,e);
          continue;
        }
        LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str");
        ld.releaseHostRemoval();
        return;
      }
 else {
        try {
          if (DEBUG) {
            LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ sourcePath+ "String_Node_Str"+ targetPath);
          }
          Files.copy(new File(sourcePath).toPath(),new File(targetPath).toPath(),StandardCopyOption.REPLACE_EXISTING);
          LOGGER.debug("String_Node_Str" + targetPath);
          reason.setDataTarget(targetPath);
          listener.notifyEnd(null);
          ld.releaseHostRemoval();
          return;
        }
 catch (        IOException ex) {
          ErrorManager.warn("String_Node_Str" + sourcePath + "String_Node_Str"+ targetPath,ex);
        }
      }
    }
  }
 else {
    LOGGER.debug("String_Node_Str");
  }
  for (  Resource sourceRes : ld.getAllHosts()) {
    COMPSsNode node=sourceRes.getNode();
    if (node != this) {
      try {
        LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ sourceRes.getName()+ "String_Node_Str"+ targetPath);
        node.sendData(ld,source,target,tgtData,reason,listener);
      }
 catch (      Exception e) {
        LOGGER.error("String_Node_Str",e);
        continue;
      }
      LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str");
      ld.releaseHostRemoval();
      return;
    }
 else {
      if (DEBUG) {
        LOGGER.debug("String_Node_Str" + ld.getName() + "String_Node_Str"+ sourceRes.getName()+ "String_Node_Str");
      }
    }
  }
  ErrorManager.warn("String_Node_Str" + ld.getName() + "String_Node_Str"+ targetPath);
  ld.releaseHostRemoval();
}