Browse Source

Fixes memory leaks in GdNavigationServer and RasterizerSceneHighEndRD

Haoyu Qiu 5 years ago
parent
commit
d9b5cbdffa

+ 6 - 3
modules/gdnavigation/gd_navigation_server.cpp

@@ -115,12 +115,15 @@
 
 GdNavigationServer::GdNavigationServer() :
 		NavigationServer(),
+		commands_mutex(Mutex::create()),
+		operations_mutex(Mutex::create()),
 		active(true) {
-	commands_mutex = Mutex::create();
-	operations_mutex = Mutex::create();
 }
 
-GdNavigationServer::~GdNavigationServer() {}
+GdNavigationServer::~GdNavigationServer() {
+	memdelete(operations_mutex);
+	memdelete(commands_mutex);
+}
 
 void GdNavigationServer::add_command(SetCommand *command) const {
 	auto mut_this = const_cast<GdNavigationServer *>(this);

+ 12 - 0
servers/visual/rasterizer_rd/rasterizer_scene_high_end_rd.cpp

@@ -2697,8 +2697,20 @@ RasterizerSceneHighEndRD::~RasterizerSceneHighEndRD() {
 		RD::get_singleton()->free(view_dependant_uniform_set);
 	}
 
+	storage->free(wireframe_material_shader);
+	storage->free(overdraw_material_shader);
+	storage->free(default_shader);
+
+	storage->free(wireframe_material);
+	storage->free(overdraw_material);
+	storage->free(default_material);
+
 	{
 		RD::get_singleton()->free(scene_state.reflection_buffer);
+		memdelete_arr(scene_state.instances);
+		memdelete_arr(scene_state.gi_probes);
+		memdelete_arr(scene_state.directional_lights);
+		memdelete_arr(scene_state.lights);
 		memdelete_arr(scene_state.reflections);
 	}
 }