mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
Clean up exit memory leaks in NodeStore
This commit is contained in:
@@ -217,11 +217,9 @@ SqliteBackendFactory::~SqliteBackendFactory ()
|
||||
{
|
||||
}
|
||||
|
||||
SqliteBackendFactory& SqliteBackendFactory::getInstance ()
|
||||
SqliteBackendFactory* SqliteBackendFactory::getInstance ()
|
||||
{
|
||||
static SqliteBackendFactory instance;
|
||||
|
||||
return instance;
|
||||
return new SqliteBackendFactory;
|
||||
}
|
||||
|
||||
String SqliteBackendFactory::getName () const
|
||||
|
||||
@@ -20,7 +20,7 @@ private:
|
||||
~SqliteBackendFactory ();
|
||||
|
||||
public:
|
||||
static SqliteBackendFactory& getInstance ();
|
||||
static SqliteBackendFactory* getInstance ();
|
||||
|
||||
String getName () const;
|
||||
|
||||
|
||||
@@ -220,11 +220,9 @@ HyperLevelDBBackendFactory::~HyperLevelDBBackendFactory ()
|
||||
{
|
||||
}
|
||||
|
||||
HyperLevelDBBackendFactory& HyperLevelDBBackendFactory::getInstance ()
|
||||
HyperLevelDBBackendFactory* HyperLevelDBBackendFactory::getInstance ()
|
||||
{
|
||||
static HyperLevelDBBackendFactory instance;
|
||||
|
||||
return instance;
|
||||
return new HyperLevelDBBackendFactory;
|
||||
}
|
||||
|
||||
String HyperLevelDBBackendFactory::getName () const
|
||||
|
||||
@@ -22,7 +22,7 @@ private:
|
||||
~HyperLevelDBBackendFactory ();
|
||||
|
||||
public:
|
||||
static HyperLevelDBBackendFactory& getInstance ();
|
||||
static HyperLevelDBBackendFactory* getInstance ();
|
||||
|
||||
String getName () const;
|
||||
|
||||
|
||||
@@ -155,11 +155,9 @@ KeyvaDBBackendFactory::~KeyvaDBBackendFactory ()
|
||||
{
|
||||
}
|
||||
|
||||
KeyvaDBBackendFactory& KeyvaDBBackendFactory::getInstance ()
|
||||
KeyvaDBBackendFactory* KeyvaDBBackendFactory::getInstance ()
|
||||
{
|
||||
static KeyvaDBBackendFactory instance;
|
||||
|
||||
return instance;
|
||||
return new KeyvaDBBackendFactory;
|
||||
}
|
||||
|
||||
String KeyvaDBBackendFactory::getName () const
|
||||
|
||||
@@ -20,7 +20,7 @@ private:
|
||||
~KeyvaDBBackendFactory ();
|
||||
|
||||
public:
|
||||
static KeyvaDBBackendFactory& getInstance ();
|
||||
static KeyvaDBBackendFactory* getInstance ();
|
||||
|
||||
String getName () const;
|
||||
|
||||
|
||||
@@ -213,22 +213,25 @@ private:
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
LevelDBBackendFactory::LevelDBBackendFactory ()
|
||||
: m_lruCache (nullptr)
|
||||
{
|
||||
leveldb::Options options;
|
||||
options.create_if_missing = true;
|
||||
options.block_cache = leveldb::NewLRUCache (getConfig ().getSize (
|
||||
siHashNodeDBCache) * 1024 * 1024);
|
||||
options.block_cache = leveldb::NewLRUCache (
|
||||
getConfig ().getSize (siHashNodeDBCache) * 1024 * 1024);
|
||||
|
||||
m_lruCache = options.block_cache;
|
||||
}
|
||||
|
||||
LevelDBBackendFactory::~LevelDBBackendFactory ()
|
||||
{
|
||||
leveldb::Cache* cache (reinterpret_cast <leveldb::Cache*> (m_lruCache));
|
||||
delete cache;
|
||||
}
|
||||
|
||||
LevelDBBackendFactory& LevelDBBackendFactory::getInstance ()
|
||||
LevelDBBackendFactory* LevelDBBackendFactory::getInstance ()
|
||||
{
|
||||
static LevelDBBackendFactory instance;
|
||||
|
||||
return instance;
|
||||
return new LevelDBBackendFactory;
|
||||
}
|
||||
|
||||
String LevelDBBackendFactory::getName () const
|
||||
|
||||
@@ -20,13 +20,16 @@ private:
|
||||
~LevelDBBackendFactory ();
|
||||
|
||||
public:
|
||||
static LevelDBBackendFactory& getInstance ();
|
||||
static LevelDBBackendFactory* getInstance ();
|
||||
|
||||
String getName () const;
|
||||
|
||||
NodeStore::Backend* createInstance (size_t keyBytes,
|
||||
StringPairArray const& keyValues,
|
||||
NodeStore::Scheduler& scheduler);
|
||||
|
||||
private:
|
||||
void* m_lruCache;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -256,11 +256,9 @@ MdbBackendFactory::~MdbBackendFactory ()
|
||||
{
|
||||
}
|
||||
|
||||
MdbBackendFactory& MdbBackendFactory::getInstance ()
|
||||
MdbBackendFactory* MdbBackendFactory::getInstance ()
|
||||
{
|
||||
static MdbBackendFactory instance;
|
||||
|
||||
return instance;
|
||||
return new MdbBackendFactory;
|
||||
}
|
||||
|
||||
String MdbBackendFactory::getName () const
|
||||
|
||||
@@ -24,7 +24,7 @@ private:
|
||||
~MdbBackendFactory ();
|
||||
|
||||
public:
|
||||
static MdbBackendFactory& getInstance ();
|
||||
static MdbBackendFactory* getInstance ();
|
||||
|
||||
String getName () const;
|
||||
|
||||
|
||||
@@ -89,11 +89,9 @@ MemoryBackendFactory::~MemoryBackendFactory ()
|
||||
{
|
||||
}
|
||||
|
||||
MemoryBackendFactory& MemoryBackendFactory::getInstance ()
|
||||
MemoryBackendFactory* MemoryBackendFactory::getInstance ()
|
||||
{
|
||||
static MemoryBackendFactory instance;
|
||||
|
||||
return instance;
|
||||
return new MemoryBackendFactory;
|
||||
}
|
||||
|
||||
String MemoryBackendFactory::getName () const
|
||||
|
||||
@@ -20,7 +20,7 @@ private:
|
||||
~MemoryBackendFactory ();
|
||||
|
||||
public:
|
||||
static MemoryBackendFactory& getInstance ();
|
||||
static MemoryBackendFactory* getInstance ();
|
||||
|
||||
String getName () const;
|
||||
|
||||
|
||||
@@ -4,6 +4,45 @@
|
||||
*/
|
||||
//==============================================================================
|
||||
|
||||
// Holds the list of Backend factories
|
||||
class Factories
|
||||
{
|
||||
public:
|
||||
typedef NodeStore::BackendFactory Factory;
|
||||
|
||||
Factories ()
|
||||
{
|
||||
}
|
||||
|
||||
~Factories ()
|
||||
{
|
||||
}
|
||||
|
||||
void add (Factory* factory)
|
||||
{
|
||||
m_list.add (factory);
|
||||
}
|
||||
|
||||
Factory* find (String name) const
|
||||
{
|
||||
for (int i = 0; i < m_list.size(); ++i)
|
||||
if (m_list [i]->getName ().compareIgnoreCase (name) == 0)
|
||||
return m_list [i];
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
static Factories& get ()
|
||||
{
|
||||
return *SharedSingleton <Factories>::get (
|
||||
SingletonLifetime::persistAfterCreation);
|
||||
}
|
||||
|
||||
private:
|
||||
OwnedArray <Factory> m_list;
|
||||
};
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
NodeStore::DecodedBlob::DecodedBlob (void const* key, void const* value, int valueBytes)
|
||||
{
|
||||
/* Data format:
|
||||
@@ -461,16 +500,7 @@ public:
|
||||
|
||||
if (type.isNotEmpty ())
|
||||
{
|
||||
BackendFactory* factory = nullptr;
|
||||
|
||||
for (int i = 0; i < s_factories.size (); ++i)
|
||||
{
|
||||
if (s_factories [i]->getName ().compareIgnoreCase (type) == 0)
|
||||
{
|
||||
factory = s_factories [i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
BackendFactory* factory (Factories::get().find (type));
|
||||
|
||||
if (factory != nullptr)
|
||||
{
|
||||
@@ -489,11 +519,6 @@ public:
|
||||
return backend;
|
||||
}
|
||||
|
||||
static void addBackendFactory (BackendFactory& factory)
|
||||
{
|
||||
s_factories.add (&factory);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
private:
|
||||
@@ -516,9 +541,9 @@ Array <NodeStore::BackendFactory*> NodeStoreImp::s_factories;
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
void NodeStore::addBackendFactory (BackendFactory& factory)
|
||||
void NodeStore::addBackendFactory (BackendFactory* factory)
|
||||
{
|
||||
NodeStoreImp::addBackendFactory (factory);
|
||||
Factories::get().add (factory);
|
||||
}
|
||||
|
||||
NodeStore::Scheduler& NodeStore::getSynchronousScheduler ()
|
||||
@@ -543,6 +568,7 @@ void NodeStore::addAvailableBackends ()
|
||||
//NodeStore::addBackendFactory (SqliteBackendFactory::getInstance ());
|
||||
|
||||
NodeStore::addBackendFactory (LevelDBBackendFactory::getInstance ());
|
||||
|
||||
NodeStore::addBackendFactory (MemoryBackendFactory::getInstance ());
|
||||
NodeStore::addBackendFactory (NullBackendFactory::getInstance ());
|
||||
|
||||
|
||||
@@ -357,13 +357,12 @@ public:
|
||||
virtual String getName () const = 0;
|
||||
|
||||
/** Add the specified backend factory to the list of available factories.
|
||||
|
||||
The names of available factories are compared against the "type"
|
||||
value in the parameter list on construction.
|
||||
|
||||
value in the parameter list on construction. Ownership of the object
|
||||
is transferred. The object must be allocated using new.
|
||||
@param factory The factory to add.
|
||||
*/
|
||||
static void addBackendFactory (BackendFactory& factory);
|
||||
static void addBackendFactory (BackendFactory* factory);
|
||||
|
||||
/** Fetch an object.
|
||||
|
||||
|
||||
@@ -53,11 +53,9 @@ NullBackendFactory::~NullBackendFactory ()
|
||||
{
|
||||
}
|
||||
|
||||
NullBackendFactory& NullBackendFactory::getInstance ()
|
||||
NullBackendFactory* NullBackendFactory::getInstance ()
|
||||
{
|
||||
static NullBackendFactory instance;
|
||||
|
||||
return instance;
|
||||
return new NullBackendFactory;
|
||||
}
|
||||
|
||||
String NullBackendFactory::getName () const
|
||||
|
||||
@@ -22,7 +22,7 @@ private:
|
||||
~NullBackendFactory ();
|
||||
|
||||
public:
|
||||
static NullBackendFactory& getInstance ();
|
||||
static NullBackendFactory* getInstance ();
|
||||
|
||||
String getName () const;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user