use mutex's right with cond's
authorraster <raster>
Wed, 21 Mar 2007 20:20:45 +0000 (20:20 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 21 Mar 2007 20:20:45 +0000 (20:20 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/e17/libs/emotion@28873 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/modules/emotion_xine.c

index dcd4f60..cd8231c 100644 (file)
@@ -140,7 +140,9 @@ _em_slave(void *par)
                       if (!ev->get_pos_thread_deleted)
                         {
                            printf("closing get_pos thread, %p\n", ev);
+                           pthread_mutex_lock(&(ev->get_pos_len_mutex));
                            pthread_cond_broadcast(&(ev->get_pos_len_cond));
+                           pthread_mutex_unlock(&(ev->get_pos_len_mutex));
                            while (ev->get_poslen);
                         }
                       printf("EX dispose %p\n", ev);
@@ -1366,10 +1368,11 @@ _em_get_pos_len_th(void *par)
    
    ev = (Emotion_Xine_Video *)par;
    
-   pthread_mutex_lock(&(ev->get_pos_len_mutex));
    for (;;)
      {
+       pthread_mutex_lock(&(ev->get_pos_len_mutex));
        pthread_cond_wait(&(ev->get_pos_len_cond), &(ev->get_pos_len_mutex));
+       pthread_mutex_unlock(&(ev->get_pos_len_mutex));
        if (ev->get_poslen)
          {
             int pos_stream = 0;
@@ -1408,7 +1411,9 @@ _em_get_pos_len(Emotion_Xine_Video *ev)
 {
    if (ev->get_poslen) return;
    ev->get_poslen = 1;
+   pthread_mutex_lock(&(ev->get_pos_len_mutex));
    pthread_cond_broadcast(&(ev->get_pos_len_cond));
+   pthread_mutex_unlock(&(ev->get_pos_len_mutex));
 }
 
 const static Emotion_Video_Module em_module =