diff --git a/src/api/dotnet/UserPropagator.cs b/src/api/dotnet/UserPropagator.cs
index 9b4fbc9b7..b9cd4dc39 100644
--- a/src/api/dotnet/UserPropagator.cs
+++ b/src/api/dotnet/UserPropagator.cs
@@ -37,7 +37,7 @@ namespace Microsoft.Z3
///
/// Propagator context for .Net
///
- public class UserPropagator
+ public class UserPropagator : IDisposable
{
///
/// Delegate type for fixed callback
@@ -205,10 +205,20 @@ namespace Microsoft.Z3
}
///
- /// Release provate memory.
+ /// Release private memory.
///
~UserPropagator()
{
+ Dispose();
+ }
+
+ ///
+ /// Must be called. The object will not be garbage collected automatically even if the context is disposed
+ ///
+ public virtual void Dispose()
+ {
+ if (!gch.IsAllocated)
+ return;
gch.Free();
if (solver == null)
ctx.Dispose();