diff --git a/src/bctklib/persistence/CheckpointStorageProvider.cs b/src/bctklib/persistence/CheckpointStorageProvider.cs index 82ca255..dc5ffdf 100644 --- a/src/bctklib/persistence/CheckpointStorageProvider.cs +++ b/src/bctklib/persistence/CheckpointStorageProvider.cs @@ -12,24 +12,30 @@ public partial class CheckpointStorageProvider : IDisposableStorageProvider readonly IStorageProvider? storageProvider; readonly IDisposable? checkpointCleanup; readonly Lazy defaultStore; + readonly bool disposeStorageProvider; + ImmutableDictionary stores = ImmutableDictionary.Empty; - public CheckpointStorageProvider(RocksDbStorageProvider? rocksDbStorageProvider, IDisposable? checkpointCleanup = null) - : this((IStorageProvider?)rocksDbStorageProvider, checkpointCleanup) + public CheckpointStorageProvider(RocksDbStorageProvider? rocksDbStorageProvider, bool disposeStorageProvider = true, IDisposable? checkpointCleanup = null) + : this((IStorageProvider?)rocksDbStorageProvider, disposeStorageProvider, checkpointCleanup) { } - public CheckpointStorageProvider(IStorageProvider? storageProvider, IDisposable? checkpointCleanup = null) + public CheckpointStorageProvider(IStorageProvider? storageProvider, bool disposeStorageProvider = true, IDisposable? checkpointCleanup = null) { this.storageProvider = storageProvider; this.checkpointCleanup = checkpointCleanup; + this.disposeStorageProvider = disposeStorageProvider; defaultStore = new Lazy(() => new MemoryTrackingStore(GetStorageProviderStore(null))); } public void Dispose() { - (storageProvider as IDisposable)?.Dispose(); + if (disposeStorageProvider) + { + (storageProvider as IDisposable)?.Dispose(); + } checkpointCleanup?.Dispose(); }