mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-29 15:25:58 +01:00
core: fix a few small memory leaks on exit (#6470)
* renderer: add destructor and destroy event source add destructor and destroy the event source. one less leak on exit of compositor reported by asan. * compositor: cleanup eventloop on exit destruct hyprctl to release the event sources, and properly cleanup the event loop on exit of compositor. less leaks on exit reported by asan * threadmgr: destroy event source on destruction destroy the event source on destruction. * eventloopmgr: reset eventloopmgr on exit aswell reset the eventloopmanager on exit of compositor and free the leaking last idle frame on monitor destroy.
This commit is contained in:
parent
9e781040d9
commit
e6d10539af
5 changed files with 14 additions and 1 deletions
|
@ -351,6 +351,8 @@ void CCompositor::cleanup() {
|
||||||
g_pXWaylandManager.reset();
|
g_pXWaylandManager.reset();
|
||||||
g_pPointerManager.reset();
|
g_pPointerManager.reset();
|
||||||
g_pSeatManager.reset();
|
g_pSeatManager.reset();
|
||||||
|
g_pHyprCtl.reset();
|
||||||
|
g_pEventLoopManager.reset();
|
||||||
|
|
||||||
if (m_sWLRRenderer)
|
if (m_sWLRRenderer)
|
||||||
wlr_renderer_destroy(m_sWLRRenderer);
|
wlr_renderer_destroy(m_sWLRRenderer);
|
||||||
|
@ -364,6 +366,7 @@ void CCompositor::cleanup() {
|
||||||
if (m_critSigSource)
|
if (m_critSigSource)
|
||||||
wl_event_source_remove(m_critSigSource);
|
wl_event_source_remove(m_critSigSource);
|
||||||
|
|
||||||
|
wl_event_loop_destroy(m_sWLEventLoop);
|
||||||
wl_display_terminate(m_sWLDisplay);
|
wl_display_terminate(m_sWLDisplay);
|
||||||
m_sWLDisplay = nullptr;
|
m_sWLDisplay = nullptr;
|
||||||
|
|
||||||
|
|
|
@ -188,6 +188,9 @@ void Events::listener_monitorDestroy(void* owner, void* data) {
|
||||||
|
|
||||||
Debug::log(LOG, "Destroy called for monitor {}", pMonitor->output->name);
|
Debug::log(LOG, "Destroy called for monitor {}", pMonitor->output->name);
|
||||||
|
|
||||||
|
if (pMonitor->output->idle_frame)
|
||||||
|
wl_event_source_remove(pMonitor->output->idle_frame);
|
||||||
|
|
||||||
pMonitor->onDisconnect(true);
|
pMonitor->onDisconnect(true);
|
||||||
|
|
||||||
pMonitor->output = nullptr;
|
pMonitor->output = nullptr;
|
||||||
|
|
|
@ -25,5 +25,6 @@ CThreadManager::CThreadManager() {
|
||||||
}
|
}
|
||||||
|
|
||||||
CThreadManager::~CThreadManager() {
|
CThreadManager::~CThreadManager() {
|
||||||
//
|
if (m_esConfigTimer)
|
||||||
|
wl_event_source_remove(m_esConfigTimer);
|
||||||
}
|
}
|
|
@ -90,6 +90,11 @@ CHyprRenderer::CHyprRenderer() {
|
||||||
wl_event_source_timer_update(m_pCursorTicker, 500);
|
wl_event_source_timer_update(m_pCursorTicker, 500);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CHyprRenderer::~CHyprRenderer() {
|
||||||
|
if (m_pCursorTicker)
|
||||||
|
wl_event_source_remove(m_pCursorTicker);
|
||||||
|
}
|
||||||
|
|
||||||
static void renderSurface(SP<CWLSurfaceResource> surface, int x, int y, void* data) {
|
static void renderSurface(SP<CWLSurfaceResource> surface, int x, int y, void* data) {
|
||||||
if (!surface->current.buffer || !surface->current.buffer->texture)
|
if (!surface->current.buffer || !surface->current.buffer->texture)
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -42,6 +42,7 @@ struct SSessionLockSurface;
|
||||||
class CHyprRenderer {
|
class CHyprRenderer {
|
||||||
public:
|
public:
|
||||||
CHyprRenderer();
|
CHyprRenderer();
|
||||||
|
~CHyprRenderer();
|
||||||
|
|
||||||
void renderMonitor(CMonitor* pMonitor);
|
void renderMonitor(CMonitor* pMonitor);
|
||||||
void arrangeLayersForMonitor(const int&);
|
void arrangeLayersForMonitor(const int&);
|
||||||
|
|
Loading…
Reference in a new issue