Skip to content
Snippets Groups Projects
Commit ee990243 authored by Emmanuel Lepage Vallee's avatar Emmanuel Lepage Vallee
Browse files

[ #39983 ] Fix minor memory leaks and a race contidition

parent f8838236
Branches
Tags
No related merge requests found
......@@ -38,6 +38,15 @@ QAbstractListModel(account?(QObject*)account:(QObject*)QCoreApplication::instanc
setRoleNames(roles);
}
AudioCodecModel::~AudioCodecModel()
{
while (m_lAudioCodecs.size()) {
AudioCodecData* c = m_lAudioCodecs[0];
m_lAudioCodecs.removeAt(0);
delete c;
}
}
///Model data
QVariant AudioCodecModel::data(const QModelIndex& idx, int role) const {
if(idx.column() == 0 && role == Qt::DisplayRole ) {
......
......@@ -42,6 +42,7 @@ public:
//Constructor
explicit AudioCodecModel(Account* account);
virtual ~AudioCodecModel();
//Abstract model member
QVariant data (const QModelIndex& index, int role = Qt::DisplayRole ) const;
......
......@@ -78,10 +78,24 @@ VideoCodecModel::VideoCodecModel(Account* account) : QAbstractListModel(QCoreApp
reload();
}
///Destructor
VideoCodecModel::~VideoCodecModel()
{
while (m_lCodecs.size()) {
VideoCodec* c = m_lCodecs[0];
m_lCodecs.removeAt(0);
delete c;
}
}
///Force a model reload from dbus
void VideoCodecModel::reload()
{
m_lCodecs.clear();
while (m_lCodecs.size()) {
VideoCodec* c = m_lCodecs[0];
m_lCodecs.removeAt(0);
delete c;
}
VideoInterface& interface = DBus::VideoManager::instance();
const VectorMapStringString codecs = interface.getCodecs(m_pAccount->id());
foreach(const MapStringString& h,codecs) {
......
......@@ -40,6 +40,7 @@ class LIB_EXPORT VideoCodecModel : public QAbstractListModel {
public:
//Private constructor, can only be called by 'Account'
explicit VideoCodecModel(Account* account = nullptr);
~VideoCodecModel();
//Roles
static const int BITRATE_ROLE = 101;
......
......@@ -63,6 +63,10 @@ const QList<VideoDevice*> VideoDevice::deviceList()
QHash<QString,VideoDevice*> devices;
VideoInterface& interface = DBus::VideoManager::instance();
const QStringList deviceList = interface.getDeviceList();
if (deviceList.size() == devices.size()) {
return m_slDevices.values();
}
foreach(const QString& device,deviceList) {
if (!m_slDevices[device])
devices[device] = new VideoDevice(device);
......
......@@ -131,6 +131,7 @@ void VideoModel::stoppedDecoding(const QString& id, const QString& shmPath)
}
qDebug() << "Video stopped for call" << id << "Renderer found:" << (m_lRenderers[id] != nullptr);
m_lRenderers[id] = nullptr;
r->mutex()->lock();
delete r;
emit videoStopped();
}
......
......@@ -25,7 +25,7 @@ PixmapManipulationVisitor::PixmapManipulationVisitor() {
m_spInstance = this;
}
QVariant PixmapManipulationVisitor::contactPhoto(Contact* c, QSize size, bool displayPresence)
QVariant PixmapManipulationVisitor::contactPhoto(Contact* c, const QSize& size, bool displayPresence)
{
Q_UNUSED(c)
Q_UNUSED(size)
......@@ -33,7 +33,7 @@ QVariant PixmapManipulationVisitor::contactPhoto(Contact* c, QSize size, bool di
return QVariant();
}
QVariant PixmapManipulationVisitor::numberCategoryIcon(const QPixmap* p, QSize size, bool displayPresence, bool isPresent)
QVariant PixmapManipulationVisitor::numberCategoryIcon(const QPixmap* p, const QSize& size, bool displayPresence, bool isPresent)
{
Q_UNUSED(p)
Q_UNUSED(size)
......@@ -42,7 +42,7 @@ QVariant PixmapManipulationVisitor::numberCategoryIcon(const QPixmap* p, QSize s
return QVariant();
}
QVariant PixmapManipulationVisitor::callPhoto(Call* c, QSize size, bool displayPresence)
QVariant PixmapManipulationVisitor::callPhoto(Call* c, const QSize& size, bool displayPresence)
{
Q_UNUSED(c)
Q_UNUSED(size)
......@@ -50,7 +50,7 @@ QVariant PixmapManipulationVisitor::callPhoto(Call* c, QSize size, bool displayP
return QVariant();
}
QVariant PixmapManipulationVisitor::callPhoto(const PhoneNumber* c, QSize size, bool displayPresence)
QVariant PixmapManipulationVisitor::callPhoto(const PhoneNumber* c, const QSize& size, bool displayPresence)
{
Q_UNUSED(c)
Q_UNUSED(size)
......
......@@ -41,10 +41,10 @@ class LIB_EXPORT PixmapManipulationVisitor {
public:
PixmapManipulationVisitor();
virtual ~PixmapManipulationVisitor() {}
virtual QVariant contactPhoto(Contact* c, QSize size, bool displayPresence = true);
virtual QVariant callPhoto(Call* c, QSize size, bool displayPresence = true);
virtual QVariant callPhoto(const PhoneNumber* n, QSize size, bool displayPresence = true);
virtual QVariant numberCategoryIcon(const QPixmap* p, QSize size, bool displayPresence = false, bool isPresent = false);
virtual QVariant contactPhoto(Contact* c, const QSize& size, bool displayPresence = true);
virtual QVariant callPhoto(Call* c, const QSize& size, bool displayPresence = true);
virtual QVariant callPhoto(const PhoneNumber* n, const QSize& size, bool displayPresence = true);
virtual QVariant numberCategoryIcon(const QPixmap* p, const QSize& size, bool displayPresence = false, bool isPresent = false);
//Singleton
static PixmapManipulationVisitor* instance();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment