From 6d2f981d35b34116882d51ac91db75157634e179 Mon Sep 17 00:00:00 2001 From: Hane Date: Mon, 11 Sep 2023 20:37:33 +0200 Subject: [PATCH] fixed stack corruption after refactor? --- src/back/backlasses.cpp | 18 ++++++++++-------- src/cont/contclasses.cpp | 4 +--- src/cont/contclasses.h | 1 + src/qt/qtclasses.cpp | 7 +++++-- src/qt/qtclasses.h | 2 +- 5 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/back/backlasses.cpp b/src/back/backlasses.cpp index d187a8d..4e4f4a1 100644 --- a/src/back/backlasses.cpp +++ b/src/back/backlasses.cpp @@ -54,15 +54,17 @@ HRESULT EndpointVolumeCallback::OnNotify(PAUDIO_VOLUME_NOTIFICATION_DATA pNotify //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; - osh->getEndpointHandlers().at(this->ep->getIndex())->getCallbackInfo()->channels = pNotify->nChannels; - UINT i = 0; - do { - osh->getEndpointHandlers().at(this->ep->getIndex())->getCallbackInfo()->channelVolumes[i] = pNotify->afChannelVolumes[i]; - } while(i++ < pNotify->nChannels); - + osh->getEndpointHandlers().at(this->ep->getIndex())->getCallbackInfo()->muted = pNotify->bMuted; + osh->getEndpointHandlers().at(this->ep->getIndex())->getCallbackInfo()->mainVolume = pNotify->fMasterVolume; + osh->getEndpointHandlers().at(this->ep->getIndex())->getCallbackInfo()->channels = pNotify->nChannels; + + UINT j = 0; + //todo: do while here caused stack corruption; sus + while(j < pNotify->nChannels) { + osh->getEndpointHandlers().at(this->ep->getIndex())->getCallbackInfo()->channelVolumes[j] = pNotify->afChannelVolumes[j]; + j++; + } return S_OK; } diff --git a/src/cont/contclasses.cpp b/src/cont/contclasses.cpp index e80d4c1..84411f7 100644 --- a/src/cont/contclasses.cpp +++ b/src/cont/contclasses.cpp @@ -139,7 +139,6 @@ std::vector OverseerHandler::getPlaybackEndpoints() { return this->os->getPlaybackEndpoints(); } - std::vector OverseerHandler::getEndpointHandlers(){ return endpointHandlers; } @@ -189,14 +188,13 @@ void OverseerHandler::reviseEndpointShowing(std::wstring endpointId, EndpointSta break; } } - //todo: + if(EndpointState::ENDPOINT_ACTIVE & state) { this->addEndpointWidget(eph); } else if (eph->getFrontVisibilityState() == EndpointState::ENDPOINT_ACTIVE){ this->removeEndpointWidget(eph->getFrontVisibilityIndex()); } return; - //this->reviseEndpointShowing(endpointId, role); } void OverseerHandler::setAddEndpointWidgetFunction(std::function addEndpointWidget){ diff --git a/src/cont/contclasses.h b/src/cont/contclasses.h index c71e604..f071433 100644 --- a/src/cont/contclasses.h +++ b/src/cont/contclasses.h @@ -35,6 +35,7 @@ enum Roles { }; struct NGuid { + //todo: still leaking? uint32_t data1; uint16_t data2; uint16_t data3; diff --git a/src/qt/qtclasses.cpp b/src/qt/qtclasses.cpp index 97330dc..9da1154 100644 --- a/src/qt/qtclasses.cpp +++ b/src/qt/qtclasses.cpp @@ -187,6 +187,8 @@ EndpointWidget::EndpointWidget(uint64_t idx, EndpointHandler* eph, QWidget *pare } EndpointWidget::~EndpointWidget() { + timer->stop(); + delete timer; this->eph->setFrontVisibilityInfo(EndpointState::ENDPOINT_ALL, INT_MAX); } @@ -211,7 +213,7 @@ void MainWindow::removeEndpointWidget(EndpointWidgetEvent* ev){ //delete ews.at(index); while ((i + 1) < ews.size()) { ews.at(i) = ews.at(i + 1); - ews.at(i)->updateEndpointHandlerFrontIndex(i); + ews.at(i)->updateFrontIndex(i); i++; } ews.pop_back(); @@ -270,7 +272,8 @@ EndpointHandler* EndpointWidget::getEndpointHandler(){ return this->eph; } -void EndpointWidget::updateEndpointHandlerFrontIndex(uint64_t index){ +void EndpointWidget::updateFrontIndex(uint64_t index){ + this->idx = index; this->eph->setFrontVisibilityInfo(EndpointState::ENDPOINT_ACTIVE, index); } diff --git a/src/qt/qtclasses.h b/src/qt/qtclasses.h index 10e9a98..9345a30 100644 --- a/src/qt/qtclasses.h +++ b/src/qt/qtclasses.h @@ -92,7 +92,7 @@ public: EndpointWidget(uint64_t idx, EndpointHandler* eph, QWidget *parent = nullptr); EndpointHandler* getEndpointHandler(); - void updateEndpointHandlerFrontIndex(uint64_t index); + void updateFrontIndex(uint64_t index); void setIndex(uint64_t idx); uint64_t getIndex();