Ticket #3553: mythcontext.13561.txt

File mythcontext.13561.txt, 1.9 KB (added by Russell Bryant <russell@…>, 12 years ago)
Line 
1Index: libs/libmyth/mythcontext.cpp
2===================================================================
3--- libs/libmyth/mythcontext.cpp        (revision 13561)
4+++ libs/libmyth/mythcontext.cpp        (working copy)
5@@ -284,7 +284,7 @@
6 
7     DisplayRes *display_res;
8 
9-    QMutex *m_priv_mutex;
10+    QMutex m_priv_mutex;
11     queue<MythPrivRequest> m_priv_requests;
12     QWaitCondition m_priv_queued;
13 
14@@ -321,7 +321,6 @@
15       m_logenable(-1), m_logmaxcount(-1), m_logprintlevel(-1),
16       screensaverEnabled(false),
17       display_res(NULL),
18-      m_priv_mutex(new QMutex(true)),
19       useSettingsCache(false)
20 {
21     GetInstallPrefixPath( m_installprefix, m_installlibdir );
22@@ -462,8 +461,6 @@
23         serverSock->DownRef();
24     if (eventSock)
25         eventSock->DownRef();
26-    if (m_priv_mutex)
27-        delete m_priv_mutex;
28     if (screensaver)
29         delete screensaver;
30 }
31@@ -2874,7 +2871,7 @@
32 
33 void MythContext::addPrivRequest(MythPrivRequest::Type t, void *data)
34 {
35-    QMutexLocker lockit(d->m_priv_mutex);
36+    QMutexLocker lockit(&d->m_priv_mutex);
37     d->m_priv_requests.push(MythPrivRequest(t, data));
38     d->m_priv_queued.wakeAll();
39 }
40@@ -2883,15 +2880,23 @@
41 {
42     while (true)
43     {
44-        d->m_priv_queued.wait();
45-        if (!d->m_priv_requests.empty())
46+        d->m_priv_mutex.lock();
47+        if (!d->m_priv_requests.empty()) {
48+            d->m_priv_mutex.unlock();
49             return;
50+        }
51+        d->m_priv_queued.wait(&d->m_priv_mutex);
52+        if (!d->m_priv_requests.empty()) {
53+            d->m_priv_mutex.unlock();
54+            return;
55+        }
56+        d->m_priv_mutex.unlock();
57     }
58 }
59 
60 MythPrivRequest MythContext::popPrivRequest()
61 {
62-    QMutexLocker lockit(d->m_priv_mutex);
63+    QMutexLocker lockit(&d->m_priv_mutex);
64     MythPrivRequest ret_val(MythPrivRequest::PrivEnd, NULL);
65     if (!d->m_priv_requests.empty()) {
66         ret_val = d->m_priv_requests.front();