]> git.sesse.net Git - vlc/blobdiff - modules/video_filter/atmo/AtmoThread.cpp
Adjust: code cosmetics
[vlc] / modules / video_filter / atmo / AtmoThread.cpp
index cdf22a5dd512620b0dd683cbca1846b1c8a70f55..5aea76706326c9a56a063bd20a10f4da571aa952 100644 (file)
@@ -11,7 +11,7 @@
 
 CThread::CThread(vlc_object_t *pOwner)
 {
-    int err;
+    m_bTerminated  = ATMO_FALSE;
     m_pAtmoThread = (atmo_thread_t *)vlc_object_create( pOwner,
                                                         sizeof(atmo_thread_t) );
     if(m_pAtmoThread)
@@ -22,10 +22,7 @@ CThread::CThread(vlc_object_t *pOwner)
         vlc_object_attach( m_pAtmoThread, m_pOwner);
 
         vlc_mutex_init( &m_TerminateLock );
-        err = vlc_cond_init( m_pAtmoThread, &m_TerminateCond );
-        if(err) {
-           msg_Err( m_pAtmoThread, "vlc_cond_init failed %d",err);
-        }
+        vlc_cond_init( &m_TerminateCond );
     }
 }
 
@@ -33,9 +30,12 @@ CThread::CThread(vlc_object_t *pOwner)
 
 CThread::CThread(void)
 {
+  m_bTerminated  = ATMO_FALSE;
+
   m_hThread = CreateThread(NULL, 0, CThread::ThreadProc ,
                            this, CREATE_SUSPENDED, &m_dwThreadID);
-  m_hTerminateEvent = CreateEvent(NULL,ATMO_FALSE,ATMO_FALSE,NULL);
+
+  m_hTerminateEvent = CreateEvent(NULL,0,0,NULL);
 }
 
 #endif
@@ -50,7 +50,6 @@ CThread::~CThread(void)
   {
       vlc_mutex_destroy( &m_TerminateLock );
       vlc_cond_destroy( &m_TerminateCond );
-      vlc_object_detach(m_pAtmoThread);
       vlc_object_release(m_pAtmoThread);
   }
 }
@@ -72,11 +71,11 @@ void *CThread::ThreadProc(vlc_object_t *obj)
       atmo_thread_t *pAtmoThread = (atmo_thread_t *)obj;
       CThread *pThread = (CThread *)pAtmoThread->p_thread;
       if(pThread) {
-         // give feedback I'am running?
-         vlc_thread_ready( pThread->m_pAtmoThread );
-
-            pThread->Execute();
+         int canc;
 
+         canc = vlc_savecancel ();
+         pThread->Execute();
+         vlc_restorecancel (canc);
       }
       return NULL;
 }
@@ -85,9 +84,9 @@ void *CThread::ThreadProc(vlc_object_t *obj)
 
 DWORD WINAPI CThread::ThreadProc(LPVOID lpParameter)
 {
-          CThread *aThread = (CThread *)lpParameter;
-          if(aThread)
-             return aThread->Execute();
+          CThread *pThread = (CThread *)lpParameter;
+          if(pThread)
+             return pThread->Execute();
           else
                  return (DWORD)-1;
 }
@@ -111,19 +110,20 @@ void CThread::Terminate(void)
 {
    // Set Termination Flag and EventObject!
    // and wait for Termination
-   m_bTerminated = ATMO_TRUE;
 
 #if defined(_ATMO_VLC_PLUGIN_)
    if(m_pAtmoThread)
    {
       vlc_mutex_lock( &m_TerminateLock );
+      m_bTerminated = ATMO_TRUE;
       vlc_cond_signal( &m_TerminateCond  );
       vlc_mutex_unlock( &m_TerminateLock );
-      vlc_object_kill( m_pAtmoThread );
 
+      vlc_object_kill( m_pAtmoThread );
       vlc_thread_join( m_pAtmoThread );
    }
 #else
+   m_bTerminated = ATMO_TRUE;
    SetEvent(m_hTerminateEvent);
    WaitForSingleObject(m_hThread,INFINITE);
 #endif
@@ -138,8 +138,7 @@ void CThread::Run()
    if(vlc_thread_create( m_pAtmoThread,
                          "Atmo-CThread-Class",
                          CThread::ThreadProc,
-                         VLC_THREAD_PRIORITY_LOW,
-                         false ))
+                         VLC_THREAD_PRIORITY_LOW ))
    {
       msg_Err( m_pOwner, "cannot launch one of the AtmoLight threads");
    }
@@ -159,12 +158,14 @@ void CThread::Run()
 ATMO_BOOL CThread::ThreadSleep(DWORD millisekunden)
 {
 #if defined(_ATMO_VLC_PLUGIN_)
+     ATMO_BOOL temp;
      vlc_mutex_lock( &m_TerminateLock );
-     int value = vlc_cond_timedwait(&m_TerminateCond,
-                                    &m_TerminateLock,
-                                    mdate() + (mtime_t)(millisekunden * 1000));
+     vlc_cond_timedwait(&m_TerminateCond,
+                        &m_TerminateLock,
+                        mdate() + (mtime_t)(millisekunden * 1000));
+     temp = m_bTerminated;
      vlc_mutex_unlock( &m_TerminateLock );
-     return (value != 0);
+     return !temp;
 
 #else
      DWORD res = WaitForSingleObject(m_hTerminateEvent,millisekunden);