From: kwolekr Date: Fri, 20 Mar 2015 22:40:18 +0000 (-0400) Subject: Revert "Fix issue #2441: crash on respawn, since a conversion std::list to std::vecto... X-Git-Tag: 0.4.13~458 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=26153bab7dbe57a0200949c9a121058150e67f6c;p=oweals%2Fminetest.git Revert "Fix issue #2441: crash on respawn, since a conversion std::list to std::vector on Environment.cpp" This reverts parts of commit 9749d9fee6db99da1ab861dc04ec63ef973db3e0, which breaks node resolver list clearing --- diff --git a/src/mapgen.cpp b/src/mapgen.cpp index 137418471..fd4fe5bb0 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -412,8 +412,9 @@ void GenerateNotifier::getEvents( std::map > &event_map, bool peek_events) { - for (std::vector::iterator it = m_notify_events.begin(); - it != m_notify_events.end(); ++it) { + std::list::iterator it; + + for (it = m_notify_events.begin(); it != m_notify_events.end(); ++it) { GenNotifyEvent &gn = *it; std::string name = (gn.type == GENNOTIFY_DECORATION) ? "decoration#"+ itos(gn.id) : diff --git a/src/mapgen.h b/src/mapgen.h index c061c5d8a..8cac58599 100644 --- a/src/mapgen.h +++ b/src/mapgen.h @@ -91,7 +91,7 @@ public: private: u32 m_notify_on; std::set *m_notify_on_deco_ids; - std::vector m_notify_events; + std::list m_notify_events; }; struct MapgenSpecificParams { diff --git a/src/nodedef.cpp b/src/nodedef.cpp index 4aee1b1c6..0654f66c5 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -445,7 +445,7 @@ private: content_t m_next_id; // List of node strings and node resolver callbacks to perform - std::vector m_pending_node_lookups; + std::list m_pending_node_lookups; // True when all nodes have been registered bool m_node_registration_complete; @@ -481,7 +481,7 @@ void CNodeDefManager::clear() m_next_id = 0; m_node_registration_complete = false; - for (std::vector::iterator + for (std::list::iterator it = m_pending_node_lookups.begin(); it != m_pending_node_lookups.end(); ++it) @@ -1320,7 +1320,7 @@ void CNodeDefManager::pendNodeResolve(NodeResolveInfo *nri) void CNodeDefManager::cancelNodeResolve(NodeResolver *resolver) { - for (std::vector::iterator + for (std::list::iterator it = m_pending_node_lookups.begin(); it != m_pending_node_lookups.end(); ++it) { @@ -1337,7 +1337,7 @@ void CNodeDefManager::runNodeResolverCallbacks() { while (!m_pending_node_lookups.empty()) { NodeResolveInfo *nri = m_pending_node_lookups.front(); - m_pending_node_lookups.erase(m_pending_node_lookups.begin()); + m_pending_node_lookups.pop_front(); nri->resolver->resolveNodeNames(nri); nri->resolver->m_lookup_done = true; delete nri; @@ -1356,7 +1356,7 @@ bool CNodeDefManager::getIdFromResolveInfo(NodeResolveInfo *nri, content_t c; std::string name = nri->nodenames.front(); - nri->nodenames.erase(nri->nodenames.begin()); + nri->nodenames.pop_front(); bool success = getId(name, c); if (!success && node_alt != "") { @@ -1396,7 +1396,7 @@ bool CNodeDefManager::getIdsFromResolveInfo(NodeResolveInfo *nri, content_t c; std::string name = nri->nodenames.front(); - nri->nodenames.erase(nri->nodenames.begin()); + nri->nodenames.pop_front(); if (name.substr(0,6) != "group:") { if (getId(name, c)) { diff --git a/src/nodedef.h b/src/nodedef.h index bd13a7bb2..dfd0f4f99 100644 --- a/src/nodedef.h +++ b/src/nodedef.h @@ -309,7 +309,7 @@ struct NodeResolveInfo { resolver = nr; } - std::vector nodenames; + std::list nodenames; std::list nodelistinfo; NodeResolver *resolver; }; diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index e16b0153a..a76e8625c 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -459,7 +459,7 @@ int ModApiMapgen::l_register_biome(lua_State *L) } NodeResolveInfo *nri = new NodeResolveInfo(b); - std::vector &nnames = nri->nodenames; + std::list &nnames = nri->nodenames; nnames.push_back(getstringfield_default(L, index, "node_top", "")); nnames.push_back(getstringfield_default(L, index, "node_filler", "")); nnames.push_back(getstringfield_default(L, index, "node_stone", ""));