When a Durable Handle is reconnected and subsequently disconnected a second time, we update disconnect_time in the smbXsrv_open_global.tdb record which ensures the timer fired by the first disconnect event doesn't purge the open record by virtue of the logic in smbXsrv_open_cleanup_fn(): nttime_to_timeval(&disconnect_time, global->disconnect_time); tdiff = usec_time_diff(&now, &disconnect_time); delete_open = (tdiff >= 1000*global->durable_timeout_msec); Unfortunately we don't implement this required logic for locking.tdb and since smbXsrv_open_cleanup_fn() in the scavenger calls into the cleanup code for locking.tdb first and the result of smbXsrv_open_cleanup_fn() (deletes vs not deleted) is not used to guide the whole logic. Have WIP patch, need bug number.