Program: 113449
Project: 113449
Buggy source:
@Override public short delete(final long parentId,final String fileName,final AtomicDBUpdate update) throws DatabaseException {
  try {
    BufferBackedFileMetadata file=BabuDBStorageHelper.getMetadata(database,parentId,fileName);
    short newLinkCount=(short)(file.getLinkCount() - 1);
    assert(newLinkCount >= 0);
    file.setLinkCount(newLinkCount);
    if (newLinkCount > 0)     update.addUpdate(FILE_ID_INDEX,BabuDBStorageHelper.createFileIdIndexKey(file.getId(),FileMetadata.RC_METADATA),file.getRCMetadata().getValue());
    update.addUpdate(BabuDBStorageManager.FILE_INDEX,BabuDBStorageHelper.createFileKey(parentId,fileName,FileMetadata.FC_METADATA),null);
    update.addUpdate(BabuDBStorageManager.FILE_INDEX,BabuDBStorageHelper.createFileKey(parentId,fileName,FileMetadata.RC_METADATA),null);
    if (newLinkCount == 0) {
      update.addUpdate(BabuDBStorageManager.FILE_ID_INDEX,BabuDBStorageHelper.createFileIdIndexKey(file.getId(),(byte)3),null);
      update.addUpdate(BabuDBStorageManager.FILE_ID_INDEX,BabuDBStorageHelper.createFileIdIndexKey(file.getId(),FileMetadata.FC_METADATA),null);
      update.addUpdate(BabuDBStorageManager.FILE_ID_INDEX,BabuDBStorageHelper.createFileIdIndexKey(file.getId(),FileMetadata.RC_METADATA),null);
      byte[] idBytes=new byte[8];
      ByteBuffer.wrap(idBytes).putLong(file.getId());
      Iterator<Entry<byte[],byte[]>> it=database.prefixLookup(BabuDBStorageManager.ACL_INDEX,idBytes,null).get();
      while (it.hasNext())       update.addUpdate(BabuDBStorageManager.ACL_INDEX,it.next().getKey(),null);
      it=database.prefixLookup(BabuDBStorageManager.XATTRS_INDEX,idBytes,null).get();
      while (it.hasNext())       update.addUpdate(BabuDBStorageManager.XATTRS_INDEX,it.next().getKey(),null);
      if (file.isDirectory()) {
        updateCount(NUM_DIRS_KEY,false,update);
      }
 else       if (file.getXLocList() != null) {
        volume.updateVolumeSize(-file.getSize(),update);
        updateCount(NUM_FILES_KEY,false,update);
      }
    }
    return file.getLinkCount();
  }
 catch (  BabuDBException exc) {
    throw new DatabaseException(exc);
  }
}

Fixed version (ground truth):
@Override public short delete(final long parentId,final String fileName,final AtomicDBUpdate update) throws DatabaseException {
  try {
    BufferBackedFileMetadata file=BabuDBStorageHelper.getMetadata(database,parentId,fileName);
    short newLinkCount=(short)(file.getLinkCount() - 1);
    assert(newLinkCount >= 0);
    file.setLinkCount(newLinkCount);
    if (newLinkCount > 0)     update.addUpdate(FILE_ID_INDEX,BabuDBStorageHelper.createFileIdIndexKey(file.getId(),FileMetadata.RC_METADATA),file.getRCMetadata().getValue());
    update.addUpdate(BabuDBStorageManager.FILE_INDEX,BabuDBStorageHelper.createFileKey(parentId,fileName,FileMetadata.FC_METADATA),null);
    update.addUpdate(BabuDBStorageManager.FILE_INDEX,BabuDBStorageHelper.createFileKey(parentId,fileName,FileMetadata.RC_METADATA),null);
    if (newLinkCount == 0) {
      update.addUpdate(BabuDBStorageManager.FILE_ID_INDEX,BabuDBStorageHelper.createFileIdIndexKey(file.getId(),(byte)3),null);
      update.addUpdate(BabuDBStorageManager.FILE_ID_INDEX,BabuDBStorageHelper.createFileIdIndexKey(file.getId(),FileMetadata.FC_METADATA),null);
      update.addUpdate(BabuDBStorageManager.FILE_ID_INDEX,BabuDBStorageHelper.createFileIdIndexKey(file.getId(),FileMetadata.RC_METADATA),null);
      byte[] idBytes=new byte[8];
      ByteBuffer.wrap(idBytes).putLong(file.getId());
      ResultSet<byte[],byte[]> it=database.prefixLookup(BabuDBStorageManager.ACL_INDEX,idBytes,null).get();
      while (it.hasNext())       update.addUpdate(BabuDBStorageManager.ACL_INDEX,it.next().getKey(),null);
      it.free();
      it=database.prefixLookup(BabuDBStorageManager.XATTRS_INDEX,idBytes,null).get();
      while (it.hasNext())       update.addUpdate(BabuDBStorageManager.XATTRS_INDEX,it.next().getKey(),null);
      it.free();
      if (file.isDirectory()) {
        updateCount(NUM_DIRS_KEY,false,update);
      }
 else       if (file.getXLocList() != null) {
        volume.updateVolumeSize(-file.getSize(),update);
        updateCount(NUM_FILES_KEY,false,update);
      }
    }
    return file.getLinkCount();
  }
 catch (  BabuDBException exc) {
    throw new DatabaseException(exc);
  }
}