private void freeBlock(AVLNode avlNode) throws IOException { int dataSize = avlNode.getPayloadInt(IDX_DATA_SIZE_I); // Check if a block has been allocated. if (dataSize > MAX_DIRECT_DATA_BYTES) { // The number of SPObject data bytes in the AVLNode. int directDataSize = MAX_DIRECT_DATA_BYTES - Constants.SIZEOF_LONG; // Free the block. long blockId = avlNode.getPayloadLong(IDX_BLOCK_ID); // Determine the block file to use. int fileIndex = XAUtils.log2( (dataSize - directDataSize - 1) >> (LOG2_MIN_BLOCK_SIZE - 1) ); ManagedBlockFile.Phase blockFilePhase = blockFilePhases[fileIndex]; blockFilePhase.freeBlock(blockId); } }