Re: [PATCH] Use cThread::mutex with absolute cCondVar::TimedWait()

Marko Mäkelä <[email protected]> Sat, 18 Feb 2023 11:10:57 +0200
Newsgroups gmane.linux.vdr
Message-ID <Y/CWIZ/d5czwe/j/@jyty>
Wed, Feb 15, 2023 at 06:01:46PM +0100, Klaus Schmidinger wrote:
>On 22.01.23 13:52, Marko M=E4kel=E4 wrote:
>>Hi,
>>
>>I would propose the following patch, or some equivalent interface that =

>>would allow cThread::mutex to be used with some cCondVar in derived =

>>classes:
>>
>>diff --git a/thread.h b/thread.h
>>index 16c4bd75..cd1d98ab 100644
>>--- a/thread.h
>>+++ b/thread.h
>>@@ -83,7 +83,9 @@ private:
>> =A0=A0 bool running;
>> =A0=A0 pthread_t childTid;
>> =A0=A0 tThreadId childThreadId;
>>+protected:
>> =A0=A0 cMutex mutex;
>>+private:
>> =A0=A0 char *description;
>> =A0=A0 bool lowPriority;
>> =A0=A0 static tThreadId mainThreadId;
>
>I don't like the idea of exposing that mutex.
>If you really need such functionality, please suggest a function that =

>does this without exposing the mutex.

An alternative might be to add a member functions to cThread that would =

take a cCondVar& as a parameter and invoke it with the private =

cThread::mutex. But, we can disregard this idea; see below.

[snip]
>>I did not complete the change to rpihddevice cOmx::Action() yet. We =

>>may be forced to retain two mutexes after all
>
>You want to expose the cThread::mutex in order to avoid an additional =

>mutex in the derived class, but may be forced to retain two mutexes =

>after all - what am I missing here?

Meanwhile, I concluded that the only option is to have two mutexes in =

the rpihddevice class cOmx. The cThread::mutex makes calls to the =

ilclient and OMX thread-safe, and a private mutex of cOmx protects
data in callback functions that may be invoked from other threads of =

that external library. An attempt to acquire the cThread::mutex in the =

callback code would lead to a deadlock.

It looks like a simple way to reduce the number of system calls in the =

plugin is to use the POSIX standard pthread_mutex_t and pthread_cond_t =

directly, or via the C++11 std::mutex and std::condition_variable. So, =

there is no pressing need to change anything in the VDR core.

	Marko

_______________________________________________
vdr mailing list
[email protected]
https://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr