From 26153bab7dbe57a0200949c9a121058150e67f6c Mon Sep 17 00:00:00 2001
From: kwolekr <kwolekr@minetest.net>
Date: Fri, 20 Mar 2015 18:40:18 -0400
Subject: [PATCH] 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
---
 src/mapgen.cpp                  |  5 +++--
 src/mapgen.h                    |  2 +-
 src/nodedef.cpp                 | 12 ++++++------
 src/nodedef.h                   |  2 +-
 src/script/lua_api/l_mapgen.cpp |  2 +-
 5 files changed, 12 insertions(+), 11 deletions(-)

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<std::string, std::vector<v3s16> > &event_map,
 	bool peek_events)
 {
-	for (std::vector<GenNotifyEvent>::iterator it = m_notify_events.begin();
-			it != m_notify_events.end(); ++it) {
+	std::list<GenNotifyEvent>::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 @@ class GenerateNotifier {
 private:
 	u32 m_notify_on;
 	std::set<u32> *m_notify_on_deco_ids;
-	std::vector<GenNotifyEvent> m_notify_events;
+	std::list<GenNotifyEvent> 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 @@ class CNodeDefManager: public IWritableNodeDefManager {
 	content_t m_next_id;
 
 	// List of node strings and node resolver callbacks to perform
-	std::vector<NodeResolveInfo *> m_pending_node_lookups;
+	std::list<NodeResolveInfo *> 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<NodeResolveInfo *>::iterator
+	for (std::list<NodeResolveInfo *>::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<NodeResolveInfo *>::iterator
+	for (std::list<NodeResolveInfo *>::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<std::string> nodenames;
+	std::list<std::string> nodenames;
 	std::list<NodeListInfo> 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<std::string> &nnames = nri->nodenames;
+	std::list<std::string> &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",        ""));
-- 
GitLab