fix pesky resource leak that took me two f*#+ing days to figure out. No thanks to you, valgrind

This commit is contained in:
Dennis Luxen 2013-10-29 18:45:01 +01:00
parent faaf97ef62
commit 64566ec6cf

View File

@ -59,15 +59,16 @@ private:
SharedDataLayout * data_layout; SharedDataLayout * data_layout;
char * shared_memory; char * shared_memory;
SharedDataType * data_type; SharedDataType * data_type_ptr;
SharedDataType * data_type_ptr;
SharedDataType CURRENT_LAYOUT; SharedDataType CURRENT_LAYOUT;
SharedDataType CURRENT_DATA; SharedDataType CURRENT_DATA;
unsigned m_check_sum; unsigned m_check_sum;
unsigned m_number_of_nodes; unsigned m_number_of_nodes;
QueryGraph * m_query_graph; boost::shared_ptr<QueryGraph> m_query_graph;
boost::shared_ptr<SharedMemory> m_layout_memory;
boost::shared_ptr<SharedMemory> m_large_memory;
std::string m_timestamp; std::string m_timestamp;
ShM<FixedPointCoordinate, true>::vector m_coordinate_list; ShM<FixedPointCoordinate, true>::vector m_coordinate_list;
@ -122,9 +123,8 @@ private:
graph_edges_ptr, graph_edges_ptr,
data_layout->graph_edge_list_size data_layout->graph_edge_list_size
); );
m_query_graph = new QueryGraph( m_query_graph.reset(
node_list , new QueryGraph(node_list, edge_list)
edge_list
); );
} }
@ -202,6 +202,8 @@ public:
CURRENT_LAYOUT = LAYOUT_NONE; CURRENT_LAYOUT = LAYOUT_NONE;
CURRENT_DATA = DATA_NONE; CURRENT_DATA = DATA_NONE;
SimpleLogger().Write() << "new shared facade";
//load data //load data
CheckAndReloadFacade(); CheckAndReloadFacade();
} }
@ -211,20 +213,26 @@ public:
CURRENT_LAYOUT != data_type_ptr[0] || CURRENT_LAYOUT != data_type_ptr[0] ||
CURRENT_DATA != data_type_ptr[1] CURRENT_DATA != data_type_ptr[1]
) { ) {
// release the previous shared memory segments
SharedMemory::Remove(CURRENT_LAYOUT);
SharedMemory::Remove(CURRENT_DATA);
CURRENT_LAYOUT = data_type_ptr[0]; CURRENT_LAYOUT = data_type_ptr[0];
CURRENT_DATA = data_type_ptr[1]; CURRENT_DATA = data_type_ptr[1];
m_layout_memory.reset( SharedMemoryFactory::Get(CURRENT_LAYOUT) );
data_layout = (SharedDataLayout *)( data_layout = (SharedDataLayout *)(
SharedMemoryFactory::Get(CURRENT_LAYOUT)->Ptr() m_layout_memory->Ptr()
); );
boost::filesystem::path ram_index_path(data_layout->ram_index_file_name); boost::filesystem::path ram_index_path(data_layout->ram_index_file_name);
if( !boost::filesystem::exists(ram_index_path) ) { if( !boost::filesystem::exists(ram_index_path) ) {
throw OSRMException("no leaf index file given in ini file"); throw OSRMException("no leaf index file given in ini file");
} }
SimpleLogger().Write() << "0";
m_large_memory.reset( SharedMemoryFactory::Get(CURRENT_DATA) );
shared_memory = (char *)( shared_memory = (char *)(
SharedMemoryFactory::Get(CURRENT_DATA)->Ptr() m_large_memory->Ptr()
); );
SimpleLogger().Write(logDEBUG) << "(re-)getting data from shared memory"; SimpleLogger().Write(logDEBUG) << "(re-)getting data from shared memory";