diff options
| author | Gavin Andresen <[email protected]> | 2012-10-08 15:18:04 -0400 |
|---|---|---|
| committer | Gavin Andresen <[email protected]> | 2012-10-08 15:51:59 -0400 |
| commit | e4954b12971a3f9c0d9bddfbabbfba36d4e9a747 (patch) | |
| tree | f35c4e6865303331085554faa89a85b52739f4b0 /src/db.cpp | |
| parent | Merge pull request #1905 from laanwj/2012_10_startup_gui_error (diff) | |
| download | discoin-e4954b12971a3f9c0d9bddfbabbfba36d4e9a747.tar.xz discoin-e4954b12971a3f9c0d9bddfbabbfba36d4e9a747.zip | |
Handle incompatible BDB environments
Before, opening a -datadir that was created with a new
version of Berkeley DB would result in an un-caught DB_RUNRECOVERY
exception.
After these changes, the error is caught and the user is told
that there is a problem and is told how to try to recover from
it.
Diffstat (limited to 'src/db.cpp')
| -rw-r--r-- | src/db.cpp | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/src/db.cpp b/src/db.cpp index 867703fbd..7ca9e3495 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -34,19 +34,14 @@ void CDBEnv::EnvShutdown() return; fDbEnvInit = false; - try - { - dbenv.close(0); - } - catch (const DbException& e) - { - printf("EnvShutdown exception: %s (%d)\n", e.what(), e.get_errno()); - } + int ret = dbenv.close(0); + if (ret != 0) + printf("EnvShutdown exception: %s (%d)\n", DbEnv::strerror(ret), ret); if (!fMockDb) DbEnv(0).remove(GetDataDir().string().c_str(), 0); } -CDBEnv::CDBEnv() : dbenv(0) +CDBEnv::CDBEnv() : dbenv(DB_CXX_NO_EXCEPTIONS) { } @@ -100,8 +95,8 @@ bool CDBEnv::Open(boost::filesystem::path pathEnv_) DB_RECOVER | nEnvFlags, S_IRUSR | S_IWUSR); - if (ret > 0) - return error("CDB() : error %d opening database environment", ret); + if (ret != 0) + return error("CDB() : error %s (%d) opening database environment", DbEnv::strerror(ret), ret); fDbEnvInit = true; fMockDb = false; @@ -191,7 +186,7 @@ CDB::CDB(const char *pszFile, const char* pszMode) : nFlags, // Flags 0); - if (ret > 0) + if (ret != 0) { delete pdb; pdb = NULL; |