diff --git a/ChangeLog b/ChangeLog index a74da4bf4..2c36db550 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Nov 08, 2011 - chris --------------------------------------------------- + release of hamsterdb-1.1.15 +Nov 08, 2011 - chris --------------------------------------------------- +o fixed a bug when using HAM_PARAM_CACHESIZE with values > 2GB; cachesize + was truncated to 32bit (thanks, Jake) + Oct 11, 2011 - chris --------------------------------------------------- release of hamsterdb-1.1.14 diff --git a/src/env.c b/src/env.c index 19196a1ed..588c014bb 100644 --- a/src/env.c +++ b/src/env.c @@ -281,7 +281,7 @@ _local_fun_create(ham_env_t *env, const char *filename, */ { ham_cache_t *cache; - ham_size_t cachesize=env_get_cachesize(env); + ham_u64_t cachesize=env_get_cachesize(env); /* cachesize is specified in BYTES */ ham_assert(cachesize, (0)); @@ -531,7 +531,7 @@ _local_fun_open(ham_env_t *env, const char *filename, ham_u32_t flags, */ { ham_cache_t *cache; - ham_size_t cachesize=env_get_cachesize(env); + ham_u64_t cachesize=env_get_cachesize(env); if (!cachesize) cachesize=HAM_DEFAULT_CACHESIZE; diff --git a/unittests/cache.cpp b/unittests/cache.cpp index 3d1d38b56..f54681378 100644 --- a/unittests/cache.cpp +++ b/unittests/cache.cpp @@ -51,6 +51,7 @@ class CacheTest : public hamsterDB_fixture BFC_REGISTER_TEST(CacheTest, setSizeDbCreateTest); BFC_REGISTER_TEST(CacheTest, setSizeDbOpenTest); BFC_REGISTER_TEST(CacheTest, bigSizeTest); + BFC_REGISTER_TEST(CacheTest, bigSizePublicApiTest); } protected: @@ -79,11 +80,17 @@ class CacheTest : public hamsterDB_fixture virtual void teardown() { __super::teardown(); - ham_env_close(m_env, 0); - ham_close(m_db, 0); - ham_delete(m_db); - ham_env_delete(m_env); + if (m_db) { + ham_close(m_db, 0); + ham_delete(m_db); + } + if (m_env) { + ham_env_close(m_env, 0); + ham_env_delete(m_env); + } BFC_ASSERT(!memtracker_get_leaks(m_alloc)); + m_db=0; + m_env=0; } void newDeleteTest(void) @@ -442,6 +449,32 @@ class CacheTest : public hamsterDB_fixture BFC_ASSERT(cache_get_page(cache, 0x123ull, 0)==0); cache_delete(cache); } + + void bigSizePublicApiTest(void) + { + teardown(); + + ham_u64_t size=1024ull*1024ull*1024ull*16ull; + ham_env_t *env; + ham_env_new(&env); + ham_parameter_t params[]={ + {HAM_PARAM_CACHESIZE, size}, + {0, 0} + }; + BFC_ASSERT_EQUAL(0, + ham_env_create_ex(env, BFC_OPATH(".test"), 0, + 0644, ¶ms[0])); + + ham_cache_t *cache=env_get_cache(env); + BFC_ASSERT(cache!=0); + BFC_ASSERT_EQUAL(size, cache_get_capacity(cache)); + + params[0].value=0; + BFC_ASSERT_EQUAL(0, ham_env_get_parameters(env, params)); + BFC_ASSERT_EQUAL(size, params[0].value); + BFC_ASSERT_EQUAL(0, ham_env_close(env, 0)); + ham_env_delete(env); + } }; BFC_REGISTER_FIXTURE(CacheTest);