Unverified Commit 4989beb3 by Rémi Verschelde Committed by GitHub

Merge pull request #37895 from qarmin/more_leak_fixes

Fixes leaks in ResourceCache, Vulkan and X11
parents 08464ea7 943ec798
...@@ -477,6 +477,9 @@ void ResourceCache::clear() { ...@@ -477,6 +477,9 @@ void ResourceCache::clear() {
resources.clear(); resources.clear();
memdelete(lock); memdelete(lock);
#ifdef TOOLS_ENABLED
memdelete(path_cache_lock);
#endif
} }
void ResourceCache::reload_externals() { void ResourceCache::reload_externals() {
......
...@@ -7274,6 +7274,11 @@ void RenderingDeviceVulkan::finalize() { ...@@ -7274,6 +7274,11 @@ void RenderingDeviceVulkan::finalize() {
vertex_formats.erase(temp); vertex_formats.erase(temp);
} }
for (int i = 0; i < framebuffer_formats.size(); i++) {
vkDestroyRenderPass(device, framebuffer_formats[i].render_pass, nullptr);
}
framebuffer_formats.clear();
//all these should be clear at this point //all these should be clear at this point
ERR_FAIL_COND(descriptor_pools.size()); ERR_FAIL_COND(descriptor_pools.size());
ERR_FAIL_COND(dependency_map.size()); ERR_FAIL_COND(dependency_map.size());
......
...@@ -1503,6 +1503,15 @@ VulkanContext::~VulkanContext() { ...@@ -1503,6 +1503,15 @@ VulkanContext::~VulkanContext() {
if (queue_props) { if (queue_props) {
free(queue_props); free(queue_props);
} }
for (uint32_t i = 0; i < FRAME_LAG; i++) {
vkDestroyFence(device, fences[i], nullptr);
vkDestroySemaphore(device, image_acquired_semaphores[i], nullptr);
vkDestroySemaphore(device, draw_complete_semaphores[i], nullptr);
if (separate_present_queue) {
vkDestroySemaphore(device, image_ownership_semaphores[i], nullptr);
}
}
DestroyDebugUtilsMessengerEXT(inst, dbg_messenger, nullptr);
vkDestroyDevice(device, nullptr); vkDestroyDevice(device, nullptr);
vkDestroyInstance(inst, nullptr); vkDestroyInstance(inst, nullptr);
} }
...@@ -1471,8 +1471,11 @@ DisplayServer::WindowMode DisplayServerX11::window_get_mode(WindowID p_window) c ...@@ -1471,8 +1471,11 @@ DisplayServer::WindowMode DisplayServerX11::window_get_mode(WindowID p_window) c
if (result == Success && data) { if (result == Success && data) {
long *state = (long *)data; long *state = (long *)data;
if (state[0] == WM_IconicState) if (state[0] == WM_IconicState) {
XFree(data);
return WINDOW_MODE_MINIMIZED; return WINDOW_MODE_MINIMIZED;
}
XFree(data);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment