private void finalizeBucket(boolean mark) throws IOException, BinaryBlobAlreadyClosedException {
if (_finalized) throw new BinaryBlobAlreadyClosedException("Already finalized (closing blob - 2).");
if(logMINOR) Logger.minor(this, "Finalizing binary blob "+this, new Exception("debug"));
if (!_isSingleBucket) {
if (!mark && (_buckets.size()==1)) {
return;
}
Bucket out = _bf.makeBucket(-1);
getSnapshot(out, mark);
for (int i=0,n=_buckets.size(); i<n;i++) {
_buckets.get(i).free();
}
if (mark) {
out.setReadOnly();
}
_buckets.clear();
_buckets.add(0, out);
} else if (mark){
DataOutputStream out = new DataOutputStream(getOutputStream());
try {
BinaryBlob.writeEndBlob(out);
} finally {
out.close();
}
}
if (mark) {
_finalized = true;
}
}