From 1fcf6c372265543448db17716ed2da7985dbe316 Mon Sep 17 00:00:00 2001 From: Hane Date: Thu, 24 Aug 2023 17:08:22 +0200 Subject: [PATCH] fixed memory leak --- src/back/backlasses.cpp | 16 ++++++++++++++-- src/cont/contclasses.h | 9 +++++++++ src/qt/qtclasses.cpp | 1 - 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/back/backlasses.cpp b/src/back/backlasses.cpp index 488ba86..dba9c69 100644 --- a/src/back/backlasses.cpp +++ b/src/back/backlasses.cpp @@ -41,8 +41,20 @@ HRESULT EndpointCallback::OnNotify(PAUDIO_VOLUME_NOTIFICATION_DATA pNotify) { //TODO: MEMORY LEAK. FREE DATA4 FROM NGUID. //TODO: el default = objcopy frees? - //delete osh->getEndpointHandlers().at(this->ep->getIndex())->getCallbackInfo()->caller; - memcpy(&osh->getEndpointHandlers().at(this->ep->getIndex())->getCallbackInfo()->caller, &pNotify->guidEventContext,sizeof(NGuid) ); + //delete osh->getEndpointHandlers().at(this->ep->getIndex())->getCallbackInfo()->caller; + //osh->getEndpointHandlers().at(this->ep->getIndex())->getCallbackInfo()->caller.freeData4(); + //Could've made a function or = override to hide this within Nguid, but back in cont = bad. + osh->getEndpointHandlers().at(this->ep->getIndex())->getCallbackInfo()->caller.data1 \ + = pNotify->guidEventContext.Data1; + osh->getEndpointHandlers().at(this->ep->getIndex())->getCallbackInfo()->caller.data2 \ + = pNotify->guidEventContext.Data2; + osh->getEndpointHandlers().at(this->ep->getIndex())->getCallbackInfo()->caller.data3 \ + = pNotify->guidEventContext.Data3; + for(int i = 0; i < 8 /* Data4 size */; i++){ + osh->getEndpointHandlers().at(this->ep->getIndex())->getCallbackInfo()->caller.data4[i] = pNotify->guidEventContext.Data4[i]; + } + + //memcpy(&osh->getEndpointHandlers().at(this->ep->getIndex())->getCallbackInfo()->caller, &pNotify->guidEventContext,sizeof(NGuid) ); osh->getEndpointHandlers().at(this->ep->getIndex())->getCallbackInfo()->muted = pNotify->bMuted; osh->getEndpointHandlers().at(this->ep->getIndex())->getCallbackInfo()->mainVolume = pNotify->fMasterVolume; diff --git a/src/cont/contclasses.h b/src/cont/contclasses.h index 2e3e053..3cde72a 100644 --- a/src/cont/contclasses.h +++ b/src/cont/contclasses.h @@ -18,6 +18,15 @@ struct NGuid { uint16_t data2; uint16_t data3; unsigned char data4[8]; + + + /* void freeData4(){ */ + /* int i = 0; */ + /* do{ */ + /* if(this->data4 + i != nullptr) free(data4 + i); */ + /* i++; */ + /* }while (i < 8); */ + /* } */ }; struct BackEndpointCallbackInfo { diff --git a/src/qt/qtclasses.cpp b/src/qt/qtclasses.cpp index 74900de..bd3c220 100644 --- a/src/qt/qtclasses.cpp +++ b/src/qt/qtclasses.cpp @@ -93,7 +93,6 @@ EndpointWidget::EndpointWidget(uint64_t idx, EndpointHandler* eph, QWidget *pare //memcpy(osh->callbackInfo[idx]->caller, osh->getGuid(), sizeof(NGuid)); //TODO: el default = objcopy frees? - //delete eph->getCallbackInfo()->caller; eph->getCallbackInfo()->caller = *osh->getGuid(); mainSlider->blockSignals(false); muteButton->blockSignals(false);