[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [libringclient/prevent_invalid_access] src: video: Lower the risk of accidental invalid memory acces
From: Emmanuel Lepage Vallee <emmanuel.lepage () savoirfairelinux ! com>
Date: 2015-05-01 0:01:35
Message-ID: E1YnyOd-0005lW-Ul () scm ! kde ! org
[Download RAW message or body]
Git commit 6f315cb17678b6002284055b08e815ac58d409ce by Emmanuel Lepage Vallee.
Committed on 01/05/2015 at 00:01.
Pushed by lepagevalleeemmanuel into branch 'prevent_invalid_access'.
video: Lower the risk of accidental invalid memory access
Refs #70533
M +4 -1 src/call.cpp
M +30 -1 src/private/shmrenderer.cpp
http://commits.kde.org/libringclient/6f315cb17678b6002284055b08e815ac58d409ce
diff --git a/src/call.cpp b/src/call.cpp
index 633bb8c..e3c105f 100644
--- a/src/call.cpp
+++ b/src/call.cpp
@@ -867,6 +867,9 @@ void CallPrivate::registerRenderer(Video::Renderer* renderer)
{
#ifdef ENABLE_VIDEO
emit q_ptr->videoStarted(renderer);
+ connect(renderer,&Video::Renderer::stopped,[this,renderer]() {
+ emit q_ptr->videoStopped(renderer);
+ });
#else
return;
#endif
@@ -875,7 +878,7 @@ void CallPrivate::registerRenderer(Video::Renderer* renderer)
void CallPrivate::removeRenderer(Video::Renderer* renderer)
{
#ifdef ENABLE_VIDEO
- emit q_ptr->videoStopped(renderer);
+ //emit q_ptr->videoStopped(renderer);
#else
return;
#endif
diff --git a/src/private/shmrenderer.cpp b/src/private/shmrenderer.cpp
index 7a422ac..31ab610 100644
--- a/src/private/shmrenderer.cpp
+++ b/src/private/shmrenderer.cpp
@@ -89,6 +89,7 @@ public:
int m_fpsC ;
int m_Fps ;
TimePoint m_lastFrameDebug;
+ QTimer* m_pTimer ;
// Constants
constexpr static const int FPS_RATE_SEC = 1 ;
@@ -114,6 +115,7 @@ ShmRendererPrivate::ShmRendererPrivate(ShmRenderer* parent)
, m_pShmArea ( (SHMHeader*)MAP_FAILED )
, m_ShmAreaLen( 0 )
, m_FrameGen ( 0 )
+ , m_pTimer ( nullptr )
#ifdef DEBUG_FPS
, m_frameCount( 0 )
, m_lastFrameDebug(std::chrono::system_clock::now() )
@@ -133,6 +135,10 @@ ShmRenderer::ShmRenderer(const QByteArray& id, const QString& shmPath, const QSi
/// Destructor
ShmRenderer::~ShmRenderer()
{
+ if (d_ptr->m_pTimer) {
+ d_ptr->m_pTimer->stop();
+ d_ptr->m_pTimer = nullptr;
+ }
stopShm();
}
@@ -264,6 +270,15 @@ void ShmRenderer::stopShm()
if (d_ptr->m_fd < 0)
return;
+ if (d_ptr->m_pTimer) {
+ d_ptr->m_pTimer->stop();
+ d_ptr->m_pTimer = nullptr;
+ }
+
+ //Emit the signal before closing the file, this lower the risk of invalid
+ //memory access
+ emit stopped();
+
::close(d_ptr->m_fd);
d_ptr->m_fd = -1;
@@ -302,6 +317,16 @@ void ShmRenderer::startRendering()
return;
Video::Renderer::d_ptr->m_isRendering = true;
+
+ if (!d_ptr->m_pTimer) {
+ d_ptr->m_pTimer = new QTimer(this);
+ d_ptr->m_pTimer->setInterval(33);
+ connect(d_ptr->m_pTimer,&QTimer::timeout,[this]() {
+ emit this->frameUpdated();
+ });
+ }
+ d_ptr->m_pTimer->start();
+
emit started();
}
@@ -311,7 +336,11 @@ void ShmRenderer::stopRendering()
QMutexLocker locker {mutex()};
Video::Renderer::d_ptr->m_isRendering = false;
- emit stopped();
+ if (d_ptr->m_pTimer) {
+ d_ptr->m_pTimer->stop();
+ d_ptr->m_pTimer = nullptr;
+ }
+
stopShm();
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic