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::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::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::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::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::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:![]() |
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++ |