Ticket #3548: autoexpire.patch.txt

File autoexpire.patch.txt, 2.4 KB (added by Russell Bryant <russell@…>, 13 years ago)
Line 
1Index: programs/mythbackend/autoexpire.h
2===================================================================
3--- programs/mythbackend/autoexpire.h   (revision 13559)
4+++ programs/mythbackend/autoexpire.h   (working copy)
5@@ -74,13 +74,14 @@
6                         QDateTime starttime);
7 
8     // main expire info
9-    set<QString>  dont_expire_set;
10-    pthread_t     expire_thread;
11-    QMutex        instance_lock;
12-    size_t        desired_space;
13-    uint          desired_freq;
14-    size_t        max_record_rate; // bytes/sec
15-    bool          expire_thread_running;
16+    set<QString>   dont_expire_set;
17+    pthread_t      expire_thread;
18+    QMutex         instance_lock;
19+    QWaitCondition instance_cond;
20+    size_t         desired_space;
21+    uint           desired_freq;
22+    size_t         max_record_rate; // bytes/sec
23+    bool           expire_thread_running;
24 
25     // update info
26     bool          update_pending;
27Index: programs/mythbackend/autoexpire.cpp
28===================================================================
29--- programs/mythbackend/autoexpire.cpp (revision 13559)
30+++ programs/mythbackend/autoexpire.cpp (working copy)
31@@ -57,13 +57,8 @@
32 
33     Init();
34 
35-    pthread_attr_t attr;
36-    pthread_attr_init(&attr);
37-    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
38-
39-    pthread_create(&expire_thread, &attr, ExpirerThread, this);
40+    pthread_create(&expire_thread, NULL, ExpirerThread, this);
41     gContext->addListener(this);
42-
43 }
44 
45 /** \fn AutoExpire::AutoExpire()
46@@ -92,8 +87,11 @@
47  */
48 AutoExpire::~AutoExpire()
49 {
50+    instance_lock.lock();
51     while (update_pending)
52-        usleep(500);
53+        instance_cond.wait(&instance_lock);
54+    instance_lock.unlock();
55+
56     if (expire_thread_running)
57     {
58         gContext->removeListener(this);
59@@ -920,6 +918,7 @@
60     ae->CalcParams();
61     ae->instance_lock.lock();
62     ae->update_pending = false;
63+    ae->instance_cond.wakeAll();
64     ae->instance_lock.unlock();
65     return NULL;
66 }
67@@ -941,13 +940,8 @@
68     // make sure there is only one update pending
69     expirer->instance_lock.lock();
70     while (expirer->update_pending)
71-    {
72-        expirer->instance_lock.unlock();
73-        usleep(500);
74-        expirer->instance_lock.lock();
75-    }
76+        expirer->instance_cond.wait(&expirer->instance_lock);
77     expirer->update_pending = true;
78-       
79     expirer->instance_lock.unlock();
80 
81     // do it..