[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