X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/4761063866d8e2112579e88d32e8c2a92af08e57..3d9a041b1ae9244499a5fd54a62d5c6d755d98b7:/lib/gdi/grc.cpp diff --git a/lib/gdi/grc.cpp b/lib/gdi/grc.cpp index d1380953..de6761e8 100644 --- a/lib/gdi/grc.cpp +++ b/lib/gdi/grc.cpp @@ -63,8 +63,7 @@ void gRC::submit(const gOpcode &o) #ifndef SYNC_PAINT pthread_mutex_lock(&mutex); #endif - int tmp=wp; - tmp+=1; + int tmp=wp+1; if ( tmp == MAXSIZE ) tmp=0; if ( tmp == rp ) @@ -85,10 +84,10 @@ void gRC::submit(const gOpcode &o) queue[wp++]=o; if ( wp == MAXSIZE ) wp = 0; + pthread_mutex_unlock(&mutex); if (o.opcode==gOpcode::flush||o.opcode==gOpcode::shutdown||o.opcode==gOpcode::notify) #ifndef SYNC_PAINT pthread_cond_signal(&cond); // wakeup gdi thread - pthread_mutex_unlock(&mutex); #else thread(); // paint #endif @@ -102,23 +101,23 @@ void *gRC::thread() #ifndef SYNC_PAINT while (1) { - singleLock s(mutex); #else while (rp != wp) { #endif + pthread_mutex_lock(&mutex); if ( rp != wp ) { - gOpcode& o(queue[rp]); + gOpcode o(queue[rp++]); + if ( rp == MAXSIZE ) + rp=0; + pthread_mutex_unlock(&mutex); if (o.opcode==gOpcode::shutdown) break; else if (o.opcode==gOpcode::notify) need_notify = 1; else o.dc->exec(&o); - rp++; - if ( rp == MAXSIZE ) - rp=0; } else {