Program: 34505
Project: 34505
Buggy source:
protected FutureEx<String> pushFile(final FileBlob blob,final TaskService taskService){
  final FutureBox<String> remotePath=new FutureBox<String>();
  remotePath.addListener(new Box<String>(){
    @Override public void setData(    String data){
      uploadLimit.release();
    }
    @Override public void setError(    Throwable e){
      uploadLimit.release();
    }
  }
);
  try {
    uploadLimit.acquire();
    connection.pushFile(cachePath + "String_Node_Str" + blob.getContentHash()+ "String_Node_Str"+ blob.getFileName(),new FileHandler(){
      @Override public void failed(      String path,      String error){
        remotePath.setError(new RuntimeException("String_Node_Str" + error));
      }
      @Override public void confirmed(      String path,      long size){
        System.out.println("String_Node_Str" + path);
        remotePath.setData(path);
      }
      @Override public void accepted(      final OutputStream out){
        System.out.println("String_Node_Str");
        taskService.schedule(new TaskService.Task(){
          @Override public void run(){
            try {
              StreamHelper.copy(blob.getContent(),out);
              out.close();
            }
 catch (            IOException e) {
              remotePath.setError(e);
            }
          }
          @Override public void interrupt(          Thread taskThread){
          }
          @Override public void canceled(){
            remotePath.setErrorIfWaiting(new RejectedExecutionException());
          }
        }
);
      }
    }
);
  }
 catch (  IOException e) {
    remotePath.setError(e);
  }
catch (  InterruptedException e) {
    return FutureBox.errorFuture(e);
  }
  return remotePath;
}

Fixed version (ground truth):
protected FutureEx<String> pushFile(final FileBlob blob,final TaskService taskService){
  final FutureBox<String> remotePath=new FutureBox<String>();
  remotePath.addListener(new Box<String>(){
    @Override public void setData(    String data){
      uploadLimit.release();
    }
    @Override public void setError(    Throwable e){
      uploadLimit.release();
    }
  }
);
  try {
    uploadLimit.acquire();
    connection.pushFile(cachePath + "String_Node_Str" + blob.getContentHash()+ "String_Node_Str"+ blob.getFileName(),new FileHandler(){
      @Override public void failed(      String path,      String error){
        remotePath.setError(new RuntimeException("String_Node_Str" + error));
      }
      @Override public void confirmed(      String path,      long size){
        remotePath.setData(path);
      }
      @Override public void accepted(      final OutputStream out){
        taskService.schedule(new TaskService.Task(){
          @Override public void run(){
            try {
              StreamHelper.copy(blob.getContent(),out);
              out.close();
            }
 catch (            IOException e) {
              remotePath.setError(e);
            }
          }
          @Override public void interrupt(          Thread taskThread){
          }
          @Override public void canceled(){
            remotePath.setErrorIfWaiting(new RejectedExecutionException());
          }
        }
);
      }
    }
);
  }
 catch (  IOException e) {
    remotePath.setError(e);
  }
catch (  InterruptedException e) {
    return FutureBox.errorFuture(e);
  }
  return remotePath;
}