Ticket #3553: mythcontext.13561.txt

File mythcontext.13561.txt, 1.9 KB (added by Russell Bryant <russell@…>, 19 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();