mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-19 12:08:11 +00:00
fix crash on core destruction
This commit is contained in:
parent
980b440e88
commit
63b08b7ebf
8 changed files with 45 additions and 21 deletions
|
|
@ -218,11 +218,14 @@ RemoteConference(core, me->getAddress(), nullptr) {
|
|||
|
||||
dConference->eventHandler->setChatRoomId(chatRoomId);
|
||||
dConference->eventHandler->setLastNotify(lastNotifyId);
|
||||
getCore()->getPrivate()->remoteListEventHandler->addHandler(dConference->eventHandler);
|
||||
getCore()->getPrivate()->remoteListEventHandler->addHandler(dConference->eventHandler.get());
|
||||
}
|
||||
|
||||
ClientGroupChatRoom::~ClientGroupChatRoom () {
|
||||
L_D();
|
||||
L_D_T(RemoteConference, dConference);
|
||||
|
||||
getCore()->getPrivate()->remoteListEventHandler->removeHandler(dConference->eventHandler.get());
|
||||
d->setCallSessionListener(nullptr);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -149,16 +149,18 @@ ServerGroupChatRoom::ServerGroupChatRoom (
|
|||
) : ChatRoom(*new ServerGroupChatRoomPrivate, core, ChatRoomId(peerAddress, peerAddress)),
|
||||
LocalConference(core, peerAddress, nullptr) {}
|
||||
|
||||
ServerGroupChatRoom::~ServerGroupChatRoom () {};
|
||||
|
||||
ServerGroupChatRoom::CapabilitiesMask ServerGroupChatRoom::getCapabilities () const {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ServerGroupChatRoom::allowCpim (bool value) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
void ServerGroupChatRoom::allowMultipart (bool value) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
bool ServerGroupChatRoom::canHandleCpim () const {
|
||||
|
|
|
|||
|
|
@ -45,6 +45,8 @@ public:
|
|||
unsigned int lastNotifyId
|
||||
);
|
||||
|
||||
~ServerGroupChatRoom ();
|
||||
|
||||
std::shared_ptr<Core> getCore () const;
|
||||
|
||||
void allowCpim (bool value) override;
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ void LocalConferenceListEventHandler::subscribeReceived (LinphoneEvent *lev, con
|
|||
addr.removeUriParam("Last-Notify");
|
||||
int notifyId = notifyIdStr.empty() ? 0 : Utils::stoi(notifyIdStr);
|
||||
ChatRoomId chatRoomId(addr, addr);
|
||||
shared_ptr<LocalConferenceEventHandler> handler = findHandler(chatRoomId);
|
||||
LocalConferenceEventHandler *handler = findHandler(chatRoomId);
|
||||
if (!handler)
|
||||
continue;
|
||||
|
||||
|
|
@ -154,11 +154,17 @@ void LocalConferenceListEventHandler::subscribeReceived (LinphoneEvent *lev, con
|
|||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void LocalConferenceListEventHandler::addHandler (shared_ptr<LocalConferenceEventHandler> handler) {
|
||||
handlers.push_back(handler);
|
||||
void LocalConferenceListEventHandler::addHandler (LocalConferenceEventHandler *handler) {
|
||||
if (handler)
|
||||
handlers.push_back(handler);
|
||||
}
|
||||
|
||||
shared_ptr<LocalConferenceEventHandler> LocalConferenceListEventHandler::findHandler (const ChatRoomId &chatRoomId) const {
|
||||
void LocalConferenceListEventHandler::removeHandler (LocalConferenceEventHandler *handler) {
|
||||
if (handler)
|
||||
handlers.remove(handler);
|
||||
}
|
||||
|
||||
LocalConferenceEventHandler *LocalConferenceListEventHandler::findHandler (const ChatRoomId &chatRoomId) const {
|
||||
for (const auto &handler : handlers) {
|
||||
if (handler->getChatRoomId() == chatRoomId)
|
||||
return handler;
|
||||
|
|
@ -167,7 +173,7 @@ shared_ptr<LocalConferenceEventHandler> LocalConferenceListEventHandler::findHan
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
const list<shared_ptr<LocalConferenceEventHandler>> &LocalConferenceListEventHandler::getHandlers () const {
|
||||
const list<LocalConferenceEventHandler *> &LocalConferenceListEventHandler::getHandlers () const {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -38,12 +38,13 @@ class LocalConferenceEventHandler;
|
|||
class LocalConferenceListEventHandler {
|
||||
public:
|
||||
void subscribeReceived (LinphoneEvent *lev, const LinphoneContent *body);
|
||||
void addHandler (std::shared_ptr<LocalConferenceEventHandler> handler);
|
||||
std::shared_ptr<LocalConferenceEventHandler> findHandler (const ChatRoomId &chatRoomId) const;
|
||||
const std::list<std::shared_ptr<LocalConferenceEventHandler>> &getHandlers () const;
|
||||
void addHandler (LocalConferenceEventHandler *handler);
|
||||
void removeHandler (LocalConferenceEventHandler *handler);
|
||||
LocalConferenceEventHandler *findHandler (const ChatRoomId &chatRoomId) const;
|
||||
const std::list<LocalConferenceEventHandler *> &getHandlers () const;
|
||||
|
||||
private:
|
||||
std::list<std::shared_ptr<LocalConferenceEventHandler>> handlers;
|
||||
std::list<LocalConferenceEventHandler *> handlers;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -142,7 +142,7 @@ void RemoteConferenceListEventHandler::notifyReceived (Content *multipart) {
|
|||
Address cid(value);
|
||||
Address peer = addresses[cid];
|
||||
ChatRoomId id(local, peer);
|
||||
shared_ptr<RemoteConferenceEventHandler> handler = findHandler(id);
|
||||
RemoteConferenceEventHandler *handler = findHandler(id);
|
||||
if (!handler)
|
||||
continue;
|
||||
|
||||
|
|
@ -155,7 +155,7 @@ void RemoteConferenceListEventHandler::notifyReceived (Content *multipart) {
|
|||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
shared_ptr<RemoteConferenceEventHandler> RemoteConferenceListEventHandler::findHandler (const ChatRoomId &chatRoomId) const {
|
||||
RemoteConferenceEventHandler *RemoteConferenceListEventHandler::findHandler (const ChatRoomId &chatRoomId) const {
|
||||
for (const auto &handler : handlers) {
|
||||
if (handler->getChatRoomId() == chatRoomId)
|
||||
return handler;
|
||||
|
|
@ -164,12 +164,18 @@ shared_ptr<RemoteConferenceEventHandler> RemoteConferenceListEventHandler::findH
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
const list<shared_ptr<RemoteConferenceEventHandler>> &RemoteConferenceListEventHandler::getHandlers () const {
|
||||
const list<RemoteConferenceEventHandler *> &RemoteConferenceListEventHandler::getHandlers () const {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
void RemoteConferenceListEventHandler::addHandler (std::shared_ptr<RemoteConferenceEventHandler> handler) {
|
||||
handlers.push_back(handler);
|
||||
void RemoteConferenceListEventHandler::addHandler (RemoteConferenceEventHandler *handler) {
|
||||
if (handler)
|
||||
handlers.push_back(handler);
|
||||
}
|
||||
|
||||
void RemoteConferenceListEventHandler::removeHandler (RemoteConferenceEventHandler *handler) {
|
||||
if (handler)
|
||||
handlers.remove(handler);
|
||||
}
|
||||
|
||||
map<Address, Address> RemoteConferenceListEventHandler::parseRlmi (const string &xmlBody) const {
|
||||
|
|
|
|||
|
|
@ -47,12 +47,13 @@ public:
|
|||
void subscribe ();
|
||||
void unsubscribe ();
|
||||
void notifyReceived (Content *multipart);
|
||||
void addHandler (std::shared_ptr<RemoteConferenceEventHandler> handler);
|
||||
std::shared_ptr<RemoteConferenceEventHandler> findHandler (const ChatRoomId &chatRoomId) const;
|
||||
const std::list<std::shared_ptr<RemoteConferenceEventHandler>> &getHandlers () const;
|
||||
void addHandler (RemoteConferenceEventHandler *handler);
|
||||
void removeHandler (RemoteConferenceEventHandler *handler);
|
||||
RemoteConferenceEventHandler *findHandler (const ChatRoomId &chatRoomId) const;
|
||||
const std::list<RemoteConferenceEventHandler *> &getHandlers () const;
|
||||
|
||||
private:
|
||||
std::list<std::shared_ptr<RemoteConferenceEventHandler>> handlers;
|
||||
std::list<RemoteConferenceEventHandler *> handlers;
|
||||
LinphoneEvent *lev = nullptr;
|
||||
|
||||
std::map<Address, Address> parseRlmi (const std::string &xmlBody) const;
|
||||
|
|
|
|||
|
|
@ -87,6 +87,9 @@ void CorePrivate::uninit () {
|
|||
chatRoomsById.clear();
|
||||
noCreatedClientGroupChatRooms.clear();
|
||||
|
||||
remoteListEventHandler = nullptr;
|
||||
localListEventHandler = nullptr;
|
||||
|
||||
AddressPrivate::clearSipAddressesCache();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue