From 6bd8cc4673f1f2a7b8b992521f2ae565125f7b7e Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Wed, 19 Oct 2022 20:46:20 +0200 Subject: [PATCH] Fix messing with std shared pointer and Qt memory managment. --- linphone-app/src/components/call/CallModel.cpp | 2 +- linphone-app/src/components/chat-events/ChatMessageModel.cpp | 2 +- linphone-app/src/components/chat-room/ChatRoomModel.cpp | 2 +- .../src/components/participant/ParticipantDeviceModel.cpp | 2 +- .../src/components/search/SearchSipAddressesModel.cpp | 2 +- linphone-app/src/components/timeline/TimelineModel.cpp | 5 +++-- 6 files changed, 8 insertions(+), 7 deletions(-) diff --git a/linphone-app/src/components/call/CallModel.cpp b/linphone-app/src/components/call/CallModel.cpp index 52b63264c..f75823394 100644 --- a/linphone-app/src/components/call/CallModel.cpp +++ b/linphone-app/src/components/call/CallModel.cpp @@ -103,7 +103,7 @@ CallModel::CallModel (shared_ptr call){ // Update fields and make a search to know to who the call belong mMagicSearch = CoreManager::getInstance()->getCore()->createMagicSearch(); - mSearch = std::make_shared(this); + mSearch = std::make_shared(); QObject::connect(mSearch.get(), SIGNAL(searchReceived(std::list> )), this, SLOT(searchReceived(std::list>))); mMagicSearch->addListener(mSearch); diff --git a/linphone-app/src/components/chat-events/ChatMessageModel.cpp b/linphone-app/src/components/chat-events/ChatMessageModel.cpp index b242a5e7a..061eb3ef6 100644 --- a/linphone-app/src/components/chat-events/ChatMessageModel.cpp +++ b/linphone-app/src/components/chat-events/ChatMessageModel.cpp @@ -91,7 +91,7 @@ ChatMessageModel::ChatMessageModel ( std::shared_ptr chat App::getInstance()->getEngine()->setObjectOwnership(this, QQmlEngine::CppOwnership);// Avoid QML to destroy it if(chatMessage){ mParticipantImdnStateListModel = QSharedPointer::create(chatMessage); - mChatMessageListener = std::make_shared(parent); + mChatMessageListener = std::make_shared(); connectTo(mChatMessageListener.get()); mChatMessage = chatMessage; mChatMessage->addListener(mChatMessageListener); diff --git a/linphone-app/src/components/chat-room/ChatRoomModel.cpp b/linphone-app/src/components/chat-room/ChatRoomModel.cpp index 51456cd8f..dacb570dc 100644 --- a/linphone-app/src/components/chat-room/ChatRoomModel.cpp +++ b/linphone-app/src/components/chat-room/ChatRoomModel.cpp @@ -123,7 +123,7 @@ ChatRoomModel::ChatRoomModel (std::shared_ptr chatRoom, cons mCoreHandlers = coreManager->getHandlers(); mChatRoom = chatRoom; - mChatRoomListener = std::make_shared(parent); + mChatRoomListener = std::make_shared(); connectTo(mChatRoomListener.get()); mChatRoom->addListener(mChatRoomListener); diff --git a/linphone-app/src/components/participant/ParticipantDeviceModel.cpp b/linphone-app/src/components/participant/ParticipantDeviceModel.cpp index 3fe0f5dc1..b56fa109e 100644 --- a/linphone-app/src/components/participant/ParticipantDeviceModel.cpp +++ b/linphone-app/src/components/participant/ParticipantDeviceModel.cpp @@ -41,7 +41,7 @@ ParticipantDeviceModel::ParticipantDeviceModel (CallModel * callModel, std::shar mIsMe = isMe; mParticipantDevice = device; if( device) { - mParticipantDeviceListener = std::make_shared(nullptr); + mParticipantDeviceListener = std::make_shared(); connectTo(mParticipantDeviceListener.get()); device->addListener(mParticipantDeviceListener); mState = device->getState(); diff --git a/linphone-app/src/components/search/SearchSipAddressesModel.cpp b/linphone-app/src/components/search/SearchSipAddressesModel.cpp index e31bb2e48..d0f41f004 100644 --- a/linphone-app/src/components/search/SearchSipAddressesModel.cpp +++ b/linphone-app/src/components/search/SearchSipAddressesModel.cpp @@ -49,7 +49,7 @@ using namespace std; SearchSipAddressesModel::SearchSipAddressesModel (QObject *parent) : ProxyListModel(parent) { mMagicSearch = CoreManager::getInstance()->getCore()->createMagicSearch(); - mSearch = std::make_shared(this); + mSearch = std::make_shared(); QObject::connect(mSearch.get(), &SearchListener::searchReceived, this, &SearchSipAddressesModel::searchReceived, Qt::QueuedConnection); mMagicSearch->addListener(mSearch); diff --git a/linphone-app/src/components/timeline/TimelineModel.cpp b/linphone-app/src/components/timeline/TimelineModel.cpp index 01322861d..68f020fe9 100644 --- a/linphone-app/src/components/timeline/TimelineModel.cpp +++ b/linphone-app/src/components/timeline/TimelineModel.cpp @@ -89,7 +89,7 @@ TimelineModel::TimelineModel (std::shared_ptr chatRoom, cons QObject::connect(mChatRoomModel.get(), &ChatRoomModel::chatRoomDeleted, this, &TimelineModel::onChatRoomDeleted); } if(chatRoom){ - mChatRoomListener = std::make_shared(this); + mChatRoomListener = std::make_shared(); connectTo(mChatRoomListener.get()); chatRoom->addListener(mChatRoomListener); } @@ -117,7 +117,7 @@ QSharedPointer TimelineModel::clone()const{ } TimelineModel::~TimelineModel(){ - if(mChatRoomModel && mChatRoomModel->getChatRoom()) + if(mChatRoomModel && mChatRoomListener && mChatRoomModel->getChatRoom()) mChatRoomModel->getChatRoom()->removeListener(mChatRoomListener); } @@ -178,6 +178,7 @@ void TimelineModel::onDefaultAccountChanged(){ void TimelineModel::disconnectChatRoomListener(){ if( mChatRoomModel && mChatRoomListener && mChatRoomModel->getChatRoom()){ mChatRoomModel->getChatRoom()->removeListener(mChatRoomListener); + mChatRoomListener = nullptr; } }