diff --git a/src/call.cpp b/src/call.cpp index c134eb207de97426a6e1ea6d5d6e541a223f08d0..6094bc393adf44fd1e5fbb1129286a9ec556a5e9 100644 --- a/src/call.cpp +++ b/src/call.cpp @@ -950,7 +950,7 @@ Call::State CallPrivate::stateChanged(const QString& newStateName) if (m_CurrentState != Call::State::DIALING && m_pDialNumber) { if (!m_pPeerPhoneNumber) m_pPeerPhoneNumber = PhoneDirectoryModel::instance()->fromTemporary(m_pDialNumber); - delete m_pDialNumber; + m_pDialNumber->deleteLater(); m_pDialNumber = nullptr; } emit q_ptr->changed(); @@ -1247,7 +1247,7 @@ void CallPrivate::call() emit q_ptr->dialNumberChanged(QString()); } else { - delete m_pDialNumber; + m_pDialNumber->deleteLater(); m_pDialNumber = nullptr; } q_ptr->setPeerName(tr("Failure")); @@ -1257,8 +1257,12 @@ void CallPrivate::call() //Normal case else if(m_Account) { qDebug() << "Calling " << q_ptr->peerPhoneNumber()->uri() << " with account " << m_Account << ". callId : " << m_CallId << "ConfId:" << q_ptr->id(); - callManager.placeCall(m_Account->id(), m_CallId, m_pDialNumber->uri()); + this->m_pPeerPhoneNumber = PhoneDirectoryModel::instance()->getNumber(m_pDialNumber->uri(),q_ptr->account()); + + //Warning: m_pDialNumber can become nullptr when linking directly + callManager.placeCall(m_Account->id(), m_CallId, m_pDialNumber->uri()); + if (ContactModel::instance()->hasBackends()) { if (q_ptr->peerPhoneNumber()->contact()) m_PeerName = q_ptr->peerPhoneNumber()->contact()->formattedName(); @@ -1274,7 +1278,7 @@ void CallPrivate::call() } if (m_pDialNumber) emit q_ptr->dialNumberChanged(QString()); - delete m_pDialNumber; + m_pDialNumber->deleteLater(); m_pDialNumber = nullptr; } else { @@ -1333,7 +1337,7 @@ void CallPrivate::start() if (m_pDialNumber) { if (!m_pPeerPhoneNumber) m_pPeerPhoneNumber = PhoneDirectoryModel::instance()->fromTemporary(m_pDialNumber); - delete m_pDialNumber; + m_pDialNumber->deleteLater(); m_pDialNumber = nullptr; } setStartTimeStamp(curTime);