The issue is that if you don't keep a reference to the UpdateHookCallback,
it may be garbage collected before it is used.
UpdateHookCallback should be referenced during used this.
Signed-off-by: Changgyu Choi <changyu.choi@samsung.com>
Co-authored-by: pjh9216 <jh9216.park@samsung.com>
private bool disposedValue;
private readonly object _lock = new object();
private EventHandler<RecordChangedEventArgs> _recordChanged;
private bool disposedValue;
private readonly object _lock = new object();
private EventHandler<RecordChangedEventArgs> _recordChanged;
+ private Interop.Sqlite.UpdateHookCallback _hook;
Interop.Sqlite.UpdateHook(_db, null, IntPtr.Zero);
Interop.Sqlite.Close(_db);
_opened = false;
Interop.Sqlite.UpdateHook(_db, null, IntPtr.Zero);
Interop.Sqlite.Close(_db);
_opened = false;
if (ret != (int)Interop.Sqlite.ResultCode.SQLITE_OK)
throw new InvalidOperationException("code:" + ret);
if (ret != (int)Interop.Sqlite.ResultCode.SQLITE_OK)
throw new InvalidOperationException("code:" + ret);
- Interop.Sqlite.UpdateHook(_db, UpdateHookCallback, IntPtr.Zero);
+ if (_hook == null)
+ {
+ _hook = new Interop.Sqlite.UpdateHookCallback(UpdateHookCallback);
+ }
+
+ Interop.Sqlite.UpdateHook(_db, _hook, IntPtr.Zero);