fork of https://github.com/oxigraph/rocksdb and https://github.com/facebook/rocksdb for nextgraph and oxigraph
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.5 KiB
44 lines
1.5 KiB
// Copyright (c) 2014, Facebook, Inc. All rights reserved.
|
|
// This source code is licensed under the BSD-style license found in the
|
|
// LICENSE file in the root directory of this source tree. An additional grant
|
|
// of patent rights can be found in the PATENTS file in the same directory.
|
|
|
|
package org.rocksdb;
|
|
|
|
/**
|
|
* ColumnFamilyHandle class to hold handles to underlying rocksdb
|
|
* ColumnFamily Pointers.
|
|
*/
|
|
public class ColumnFamilyHandle extends RocksObject {
|
|
ColumnFamilyHandle(RocksDB rocksDB, long nativeHandle) {
|
|
super();
|
|
nativeHandle_ = nativeHandle;
|
|
// rocksDB must point to a valid RocksDB instance;
|
|
assert(rocksDB != null);
|
|
// ColumnFamilyHandle must hold a reference to the related RocksDB instance
|
|
// to guarantee that while a GC cycle starts ColumnFamilyHandle instances
|
|
// are freed prior to RocksDB instances.
|
|
rocksDB_ = rocksDB;
|
|
}
|
|
|
|
/**
|
|
* <p>Deletes underlying C++ iterator pointer.</p>
|
|
*
|
|
* <p>Note: the underlying handle can only be safely deleted if the RocksDB
|
|
* instance related to a certain ColumnFamilyHandle is still valid and initialized.
|
|
* Therefore {@code disposeInternal()} checks if the RocksDB is initialized
|
|
* before freeing the native handle.</p>
|
|
*/
|
|
@Override protected void disposeInternal() {
|
|
synchronized (rocksDB_) {
|
|
assert (isInitialized());
|
|
if (rocksDB_.isInitialized()) {
|
|
disposeInternal(nativeHandle_);
|
|
}
|
|
}
|
|
}
|
|
|
|
private native void disposeInternal(long handle);
|
|
|
|
private RocksDB rocksDB_;
|
|
}
|
|
|