Cache: Use auto_ptr in storage_inmemory

This commit is contained in:
Johan Wikman
2016-12-09 10:38:43 +02:00
parent 16fad9c2cd
commit 9519be5e60
5 changed files with 25 additions and 16 deletions

View File

@ -15,6 +15,7 @@
#include "inmemorystoragemt.hh" #include "inmemorystoragemt.hh"
using maxscale::SpinLockGuard; using maxscale::SpinLockGuard;
using std::auto_ptr;
InMemoryStorageMT::InMemoryStorageMT(const std::string& name, uint32_t ttl) InMemoryStorageMT::InMemoryStorageMT(const std::string& name, uint32_t ttl)
: InMemoryStorage(name, ttl) : InMemoryStorage(name, ttl)
@ -27,11 +28,11 @@ InMemoryStorageMT::~InMemoryStorageMT()
} }
// static // static
InMemoryStorageMT* InMemoryStorageMT::create(const std::string& name, auto_ptr<InMemoryStorageMT> InMemoryStorageMT::create(const std::string& name,
uint32_t ttl, uint32_t ttl,
int argc, char* argv[]) int argc, char* argv[])
{ {
return new InMemoryStorageMT(name, ttl); return auto_ptr<InMemoryStorageMT>(new InMemoryStorageMT(name, ttl));
} }
cache_result_t InMemoryStorageMT::get_info(uint32_t what, json_t** ppInfo) const cache_result_t InMemoryStorageMT::get_info(uint32_t what, json_t** ppInfo) const

View File

@ -21,7 +21,9 @@ class InMemoryStorageMT : public InMemoryStorage
public: public:
~InMemoryStorageMT(); ~InMemoryStorageMT();
static InMemoryStorageMT* create(const std::string& name, uint32_t ttl, int argc, char* argv[]); typedef std::auto_ptr<InMemoryStorageMT> SInMemoryStorageMT;
static SInMemoryStorageMT create(const std::string& name, uint32_t ttl, int argc, char* argv[]);
cache_result_t get_info(uint32_t what, json_t** ppInfo) const; cache_result_t get_info(uint32_t what, json_t** ppInfo) const;
cache_result_t get_value(const CACHE_KEY& key, uint32_t flags, GWBUF** ppresult); cache_result_t get_value(const CACHE_KEY& key, uint32_t flags, GWBUF** ppresult);

View File

@ -14,6 +14,8 @@
#define MXS_MODULE_NAME "storage_inmemory" #define MXS_MODULE_NAME "storage_inmemory"
#include "inmemorystoragest.hh" #include "inmemorystoragest.hh"
using std::auto_ptr;
InMemoryStorageST::InMemoryStorageST(const std::string& name, uint32_t ttl) InMemoryStorageST::InMemoryStorageST(const std::string& name, uint32_t ttl)
: InMemoryStorage(name, ttl) : InMemoryStorage(name, ttl)
{ {
@ -24,11 +26,11 @@ InMemoryStorageST::~InMemoryStorageST()
} }
// static // static
InMemoryStorageST* InMemoryStorageST::create(const std::string& name, auto_ptr<InMemoryStorageST> InMemoryStorageST::create(const std::string& name,
uint32_t ttl, uint32_t ttl,
int argc, char* argv[]) int argc, char* argv[])
{ {
return new InMemoryStorageST(name, ttl); return auto_ptr<InMemoryStorageST>(new InMemoryStorageST(name, ttl));
} }
cache_result_t InMemoryStorageST::get_info(uint32_t what, json_t** ppinfo) const cache_result_t InMemoryStorageST::get_info(uint32_t what, json_t** ppinfo) const

View File

@ -20,7 +20,9 @@ class InMemoryStorageST : public InMemoryStorage
public: public:
~InMemoryStorageST(); ~InMemoryStorageST();
static InMemoryStorageST* create(const std::string& name, uint32_t ttl, int argc, char* argv[]); typedef std::auto_ptr<InMemoryStorageST> SInMemoryStorageST;
static SInMemoryStorageST create(const std::string& name, uint32_t ttl, int argc, char* argv[]);
cache_result_t get_info(uint32_t what, json_t** ppinfo) const; cache_result_t get_info(uint32_t what, json_t** ppinfo) const;
cache_result_t get_value(const CACHE_KEY& key, uint32_t flags, GWBUF** ppresult); cache_result_t get_value(const CACHE_KEY& key, uint32_t flags, GWBUF** ppresult);

View File

@ -18,6 +18,8 @@
#include "inmemorystoragest.hh" #include "inmemorystoragest.hh"
#include "inmemorystoragemt.hh" #include "inmemorystoragemt.hh"
using std::auto_ptr;
namespace namespace
{ {
@ -50,33 +52,33 @@ CACHE_STORAGE* createInstance(cache_thread_model_t model,
"does not enforce such a limit.", (unsigned long)max_size); "does not enforce such a limit.", (unsigned long)max_size);
} }
InMemoryStorage* pStorage = NULL; auto_ptr<InMemoryStorage> sStorage;
switch (model) switch (model)
{ {
case CACHE_THREAD_MODEL_ST: case CACHE_THREAD_MODEL_ST:
MXS_EXCEPTION_GUARD(pStorage = InMemoryStorageST::create(zname, ttl, argc, argv)); MXS_EXCEPTION_GUARD(sStorage = InMemoryStorageST::create(zname, ttl, argc, argv));
break; break;
default: default:
ss_dassert(!true); ss_dassert(!true);
MXS_ERROR("Unknown thread model %d, creating multi-thread aware storage.", (int)model); MXS_ERROR("Unknown thread model %d, creating multi-thread aware storage.", (int)model);
case CACHE_THREAD_MODEL_MT: case CACHE_THREAD_MODEL_MT:
MXS_EXCEPTION_GUARD(pStorage = InMemoryStorageST::create(zname, ttl, argc, argv)); MXS_EXCEPTION_GUARD(sStorage = InMemoryStorageST::create(zname, ttl, argc, argv));
break; break;
} }
if (pStorage) if (sStorage.get())
{ {
MXS_NOTICE("Storage module created."); MXS_NOTICE("Storage module created.");
} }
return reinterpret_cast<CACHE_STORAGE*>(pStorage); return reinterpret_cast<CACHE_STORAGE*>(sStorage.release());
} }
void freeInstance(CACHE_STORAGE* pinstance) void freeInstance(CACHE_STORAGE* pinstance)
{ {
delete reinterpret_cast<InMemoryStorage*>(pinstance); MXS_EXCEPTION_GUARD(delete reinterpret_cast<InMemoryStorage*>(pinstance));
} }
cache_result_t getInfo(CACHE_STORAGE* pStorage, cache_result_t getInfo(CACHE_STORAGE* pStorage,