Waiting for <n> other connection(s) to close before deleting

OS: WIndows 10
Language C++ inside UWP app
I cannot delete the database(cbl::Database) neither using the deleteDatabase method or the static one.
The replicator was closed, verified to be closed and deleted before this, also the queries and the query listener were deleted.
This is related to this question and this issue

From my investigation, the number of successfull removeDataFile calls should be equal to the number of addDataFile calls. Somewhere, the ownership of several DataFile s is lost or not managed.

I captured the following backtraces for addDataFile and removeDataFile in the order they appear since the start of the application until the exception is thrown.
I could not capture the logs because there were some issues enabling them inside the UWP app.

1. addDataFile

AppNameHere.dll!litecore::DataFile::reopen() Line 165 C++
AppNameHere.dll!litecore::SQLiteDataFile::reopen() Line 201 C++
AppNameHere.dll!litecore::SQLiteDataFile::SQLiteDataFile(const litecore::FilePath & path, litecore::DataFile::Delegate * delegate, const litecore::DataFile::Options * options) Line 190 C++
AppNameHere.dll!litecore::SQLiteDataFile::factory::openFile(const litecore::FilePath & path, litecore::DataFile::Delegate * delegate, const litecore::DataFile::Options * options) Line 173 C++
AppNameHere.dll!c4Internal::Database::Database(const std::string & bundlePath, C4DatabaseConfig inConfig) Line 151 C++
AppNameHere.dll!c4Database::c4Database(const litecore::FilePath & path, C4DatabaseConfig config) Line 27 C++
AppNameHere.dll!c4db_open::__l2::() Line 93 C++
AppNameHere.dll!fleece::function_ref<c4Database * __cdecl(void)>::callback_fn<c4Database * (void)>(__int64 callable) Line 61 C++
AppNameHere.dll!fleece::function_ref<c4Database * __cdecl(void)>::operator()() Line 73 C++
AppNameHere.dll!c4Internal::tryCatch<c4Database *>(C4Error * outError, fleece::function_ref<c4Database * __cdecl(void)> fn) Line 60 C++
AppNameHere.dll!c4db_open(FLSlice path, const C4DatabaseConfig * configP, C4Error * outError) Line 92 C++
AppNameHere.dll!c4db_openNamed(FLSlice name, const C4DatabaseConfig2 * config, C4Error * outError) Line 104 C++
AppNameHere.dll!CBLDatabase_Open_s(FLSlice name, const CBLDatabaseConfiguration_s * config, CBLError * outError) Line 175 C++
AppNameHere.dll!CBLDatabase_Open(const char * name, const CBLDatabaseConfiguration * config, CBLError * outError) Line 168 C++
AppNameHere.dll!cbl::Database::Database(const std::string & name, const CBLDatabaseConfiguration & config) Line 89 C++
[External Code]

2. addDataFile

AppNameHere.dll!litecore::DataFile::reopen() Line 165 C++
AppNameHere.dll!litecore::SQLiteDataFile::reopen() Line 201 C++
AppNameHere.dll!litecore::SQLiteDataFile::SQLiteDataFile(const litecore::FilePath & path, litecore::DataFile::Delegate * delegate, const litecore::DataFile::Options * options) Line 190 C++
AppNameHere.dll!litecore::SQLiteDataFile::factory::openFile(const litecore::FilePath & path, litecore::DataFile::Delegate * delegate, const litecore::DataFile::Options * options) Line 173 C++
AppNameHere.dll!c4Internal::Database::Database(const std::string & bundlePath, C4DatabaseConfig inConfig) Line 151 C++
AppNameHere.dll!c4Database::c4Database(const litecore::FilePath & path, C4DatabaseConfig config) Line 27 C++
AppNameHere.dll!c4db_open::__l2::() Line 93 C++
AppNameHere.dll!fleece::function_ref<c4Database * __cdecl(void)>::callback_fn<c4Database * (void)>(__int64 callable) Line 61 C++
AppNameHere.dll!fleece::function_ref<c4Database * __cdecl(void)>::operator()() Line 73 C++
AppNameHere.dll!c4Internal::tryCatch<c4Database *>(C4Error * outError, fleece::function_ref<c4Database * __cdecl(void)> fn) Line 60 C++
AppNameHere.dll!c4db_open(FLSlice path, const C4DatabaseConfig * configP, C4Error * outError) Line 92 C++
AppNameHere.dll!c4db_openAgain(c4Database * db, C4Error * outError) Line 112 C++
AppNameHere.dll!c4Internal::C4RemoteReplicator::createReplicator() Line 131 C++
AppNameHere.dll!C4Replicator::_start(bool reset) Line 276 C++
AppNameHere.dll!c4Internal::C4RemoteReplicator::_restart(bool reset) Line 152 C++
AppNameHere.dll!c4Internal::C4RemoteReplicator::start(bool reset) Line 59 C++
AppNameHere.dll!c4repl_start(C4Replicator * repl, bool reset) Line 244 C++
AppNameHere.dll!CBLReplicator::start() Line 167 C++
AppNameHere.dll!CBLReplicator_Start(CBLReplicator * repl) Line 76 C++
AppNameHere.dll!cbl::Replicator::start() Line 129 C++
[External Code]

3. addDataFile

AppNameHere.dll!litecore::DataFile::reopen() Line 165 C++
AppNameHere.dll!litecore::SQLiteDataFile::reopen() Line 201 C++
AppNameHere.dll!litecore::SQLiteDataFile::SQLiteDataFile(const litecore::FilePath & path, litecore::DataFile::Delegate * delegate, const litecore::DataFile::Options * options) Line 190 C++
AppNameHere.dll!litecore::SQLiteDataFile::factory::openFile(const litecore::FilePath & path, litecore::DataFile::Delegate * delegate, const litecore::DataFile::Options * options) Line 173 C++
AppNameHere.dll!c4Internal::Database::Database(const std::string & bundlePath, C4DatabaseConfig inConfig) Line 151 C++
AppNameHere.dll!c4Database::c4Database(const litecore::FilePath & path, C4DatabaseConfig config) Line 27 C++
AppNameHere.dll!c4db_open::__l2::() Line 93 C++
AppNameHere.dll!fleece::function_ref<c4Database * __cdecl(void)>::callback_fn<c4Database * (void)>(__int64 callable) Line 61 C++
AppNameHere.dll!fleece::function_ref<c4Database * __cdecl(void)>::operator()() Line 73 C++
AppNameHere.dll!c4Internal::tryCatch<c4Database *>(C4Error * outError, fleece::function_ref<c4Database * __cdecl(void)> fn) Line 60 C++
AppNameHere.dll!c4db_open(FLSlice path, const C4DatabaseConfig * configP, C4Error * outError) Line 92 C++
AppNameHere.dll!c4db_openAgain(c4Database * db, C4Error * outError) Line 112 C++
AppNameHere.dll!litecore::repl::DBAccess::insertionDB::__l5::(c4Database * db) Line 62 C++
AppNameHere.dll!litecore::access_lock<c4Database *,std::recursive_mutex>::use<void (c4Database *)>(litecore::repl::DBAccess::insertionDB::__l5::void (c4Database *) callback) Line 38 C++
AppNameHere.dll!litecore::repl::DBAccess::insertionDB() Line 71 C++
AppNameHere.dll!litecore::repl::DBAccess::useForInsert<bool,bool (c4Database *)>(litecore::repl::DBAccess::beginTransaction::__l2::bool (c4Database *) callback) Line 151 C++
AppNameHere.dll!litecore::repl::DBAccess::beginTransaction(C4Error * outError) Line 454 C++
AppNameHere.dll!litecore::repl::DBAccess::Transaction::begin(C4Error * error) Line 170 C++
AppNameHere.dll!litecore::repl::Inserter::_insertRevisionsNow(int gen) Line 66 C++
[External Code]

AppNameHere.dll!litecore::DataFile::reopen() Line 165 C++
AppNameHere.dll!litecore::SQLiteDataFile::reopen() Line 201 C++
AppNameHere.dll!litecore::SQLiteDataFile::SQLiteDataFile(const litecore::FilePath & path, litecore::DataFile::Delegate * delegate, const litecore::DataFile::Options * options) Line 190 C++
AppNameHere.dll!litecore::SQLiteDataFile::factory::openFile(const litecore::FilePath & path, litecore::DataFile::Delegate * delegate, const litecore::DataFile::Options * options) Line 173 C++
AppNameHere.dll!c4Internal::Database::Database(const std::string & bundlePath, C4DatabaseConfig inConfig) Line 151 C++
AppNameHere.dll!c4Database::c4Database(const litecore::FilePath & path, C4DatabaseConfig config) Line 27 C++
AppNameHere.dll!c4db_open::__l2::() Line 93 C++
AppNameHere.dll!fleece::function_ref<c4Database * __cdecl(void)>::callback_fn<c4Database * (void)>(__int64 callable) Line 61 C++
AppNameHere.dll!fleece::function_ref<c4Database * __cdecl(void)>::operator()() Line 73 C++
AppNameHere.dll!c4Internal::tryCatch<c4Database *>(C4Error * outError, fleece::function_ref<c4Database * __cdecl(void)> fn) Line 60 C++
AppNameHere.dll!c4db_open(FLSlice path, const C4DatabaseConfig * configP, C4Error * outError) Line 92 C++
AppNameHere.dll!c4db_openAgain(c4Database * db, C4Error * outError) Line 112 C++
AppNameHere.dll!c4Internal::C4RemoteReplicator::createReplicator() Line 131 C++
AppNameHere.dll!C4Replicator::_start(bool reset) Line 276 C++
AppNameHere.dll!c4Internal::C4RemoteReplicator::_restart(bool reset) Line 152 C++
AppNameHere.dll!c4Internal::C4RemoteReplicator::start(bool reset) Line 59 C++
AppNameHere.dll!c4repl_start(C4Replicator * repl, bool reset) Line 244 C++
AppNameHere.dll!CBLReplicator::start() Line 167 C++
AppNameHere.dll!CBLReplicator_Start(CBLReplicator * repl) Line 76 C++
AppNameHere.dll!cbl::Replicator::start() Line 129 C++
[External Code]

4.addDataFile

AppNameHere.dll!litecore::DataFile::reopen() Line 165 C++
AppNameHere.dll!litecore::SQLiteDataFile::reopen() Line 201 C++
AppNameHere.dll!litecore::SQLiteDataFile::SQLiteDataFile(const litecore::FilePath & path, litecore::DataFile::Delegate * delegate, const litecore::DataFile::Options * options) Line 190 C++
AppNameHere.dll!litecore::SQLiteDataFile::factory::openFile(const litecore::FilePath & path, litecore::DataFile::Delegate * delegate, const litecore::DataFile::Options * options) Line 173 C++
AppNameHere.dll!c4Internal::Database::Database(const std::string & bundlePath, C4DatabaseConfig inConfig) Line 151 C++
AppNameHere.dll!c4Database::c4Database(const litecore::FilePath & path, C4DatabaseConfig config) Line 27 C++
AppNameHere.dll!c4db_open::__l2::() Line 93 C++
AppNameHere.dll!fleece::function_ref<c4Database * __cdecl(void)>::callback_fn<c4Database * (void)>(__int64 callable) Line 61 C++
AppNameHere.dll!fleece::function_ref<c4Database * __cdecl(void)>::operator()() Line 73 C++
AppNameHere.dll!c4Internal::tryCatch<c4Database *>(C4Error * outError, fleece::function_ref<c4Database * __cdecl(void)> fn) Line 60 C++
AppNameHere.dll!c4db_open(FLSlice path, const C4DatabaseConfig * configP, C4Error * outError) Line 92 C++
AppNameHere.dll!c4db_openAgain(c4Database * db, C4Error * outError) Line 112 C++
AppNameHere.dll!litecore::repl::DBAccess::insertionDB::__l5::(c4Database * db) Line 62 C++
AppNameHere.dll!litecore::access_lock<c4Database *,std::recursive_mutex>::use<void (c4Database *)>(litecore::repl::DBAccess::insertionDB::__l5::void (c4Database *) callback) Line 38 C++
AppNameHere.dll!litecore::repl::DBAccess::insertionDB() Line 71 C++
AppNameHere.dll!litecore::repl::DBAccess::useForInsert<bool,bool (c4Database *)>(litecore::repl::DBAccess::beginTransaction::__l2::bool (c4Database *) callback) Line 151 C++
AppNameHere.dll!litecore::repl::DBAccess::beginTransaction(C4Error * outError) Line 454 C++
AppNameHere.dll!litecore::repl::DBAccess::Transaction::begin(C4Error * error) Line 170 C++
AppNameHere.dll!litecore::repl::Inserter::_insertRevisionsNow(int gen) Line 66 C++
[External Code]

removeDataFile

AppNameHere.dll!litecore::DataFile::close(bool forDelete) Line 146 C++
AppNameHere.dll!c4Internal::Database::~Database() Line 193 C++
AppNameHere.dll!c4Database::~c4Database() Line 52 C++
[External Code]
AppNameHere.dll!fleece::RefCounted::_careful_release() Line 113 C++
AppNameHere.dll!fleece::RefCounted::_release() Line 48 C++
AppNameHere.dll!fleece::release(const fleece::RefCounted * r) Line 36 C++
AppNameHere.dll!c4base_release(void * obj) Line 450 C++
AppNameHere.dll!c4db_release(c4Database * r) Line 150 C++
AppNameHere.dll!litecore::repl::DBAccess::{dtor}::__l2::(c4Database * db) Line 79 C++
AppNameHere.dll!litecore::access_lock<c4Database *,std::recursive_mutex>::use<void (c4Database *)>(litecore::repl::DBAccess::{dtor}::__l2::void (c4Database *) callback) Line 38 C++
AppNameHere.dll!litecore::repl::DBAccess::~DBAccess() Line 80 C++
[External Code]
AppNameHere.dll!litecore::repl::Worker::~Worker() Line 109 C++
[External Code]
AppNameHere.dll!fleece::RefCounted::_careful_release() Line 113 C++
AppNameHere.dll!fleece::RefCounted::_release() Line 48 C++
AppNameHere.dll!fleece::release(const fleece::RefCounted * r) Line 36 C++
[External Code]

removeDataFile

AppNameHere.dll!litecore::DataFile::close(bool forDelete) Line 146 C++
AppNameHere.dll!litecore::SQLiteDataFile::~SQLiteDataFile() Line 196 C++
[External Code]
AppNameHere.dll!c4Internal::Database::~Database() Line 193 C++
AppNameHere.dll!c4Database::~c4Database() Line 52 C++
[External Code]
AppNameHere.dll!fleece::RefCounted::_careful_release() Line 113 C++
AppNameHere.dll!fleece::RefCounted::_release() Line 48 C++
AppNameHere.dll!fleece::release(const fleece::RefCounted * r) Line 36 C++
AppNameHere.dll!c4base_release(void * obj) Line 450 C++
AppNameHere.dll!c4db_release(c4Database * r) Line 150 C++
AppNameHere.dll!litecore::repl::DBAccess::{dtor}::__l2::(c4Database * db) Line 79 C++
AppNameHere.dll!litecore::access_lock<c4Database *,std::recursive_mutex>::use<void (c4Database *)>(litecore::repl::DBAccess::{dtor}::__l2::void (c4Database *) callback) Line 38 C++
AppNameHere.dll!litecore::repl::DBAccess::~DBAccess() Line 80 C++
[External Code]
AppNameHere.dll!litecore::repl::Worker::~Worker() Line 109 C++
[External Code]
AppNameHere.dll!fleece::RefCounted::_careful_release() Line 113 C++
AppNameHere.dll!fleece::RefCounted::_release() Line 48 C++
AppNameHere.dll!fleece::release(const fleece::RefCounted * r) Line 36 C++
[External Code]

The exception

KernelBase.dll!00007ffe83023b29() Unknown
vcruntime140d_app.dll!00007ffe727c8337() Unknown
> AppNameHere.dll!litecore::error::_throw() Line 549 C++
AppNameHere.dll!litecore::error::_throw(litecore::error::LiteCoreError code, const char * fmt, …) Line 579 C++
AppNameHere.dll!litecore::DataFile::deleteDataFile(litecore::DataFile * file, const litecore::DataFile::Options * options, litecore::DataFile::Shared * shared, litecore::DataFile::Factory & factory) Line 243 C++
AppNameHere.dll!litecore::DataFile::factory::deleteFile(const litecore::FilePath & path, const litecore::DataFile::Options * options) Line 219 C++
AppNameHere.dll!c4Internal::Database::deleteDatabaseFileAtPath(const std::string & dbPath, const char * storageEngine) Line 246 C++
AppNameHere.dll!c4Internal::Database::deleteDatabaseAtPath(const std::string & dbPath) Line 223 C++
[External Code]
AppNameHere.dll!fleece::function_ref<bool __cdecl(void)>::callback_fn<std::_Binder<std::_Unforced,bool (__cdecl*)(std::string const &),std::string>>(__int64 callable) Line 61 C++
AppNameHere.dll!fleece::function_ref<bool __cdecl(void)>::operator()() Line 73 C++
AppNameHere.dll!c4Internal::tryCatch(C4Error * outError, fleece::function_ref<bool __cdecl(void)> fn) Line 60 C++
AppNameHere.dll!c4db_deleteAtPath(FLSlice dbPath, C4Error * outError) Line 152 C++
AppNameHere.dll!c4db_deleteNamed(FLSlice dbName, FLSlice inDirectory, C4Error * outError) Line 161 C++
AppNameHere.dll!CBL_DeleteDatabase_s(FLSlice name, FLSlice inDirectory, CBLError * outError) Line 151 C++
AppNameHere.dll!CBL_DeleteDatabase(const char * name, const char * inDirectory, CBLError * outError) Line 145 C++
AppNameHere.dll!cbl::Database::deleteDatabase(const std::string & name, const std::string & inDirectory) Line 73 C++

Well you are using an unsupported product on a platform with which it has never been tested, so it wouldn’t surprise me that things are loopy. That being said there is not really much that I can offer for this given that you cannot produce any logs and not said anything about your setup or code logic.

Are you actually waiting until you get a stopped callback from the replicator before trying to delete? That’s probably the only question I can ask. If not, then it might be a good idea.

Yes, I do that, thanks!