[vdr] VDR gets somehow stuck and consumes all CPU time

Klaus Schmidinger Klaus.Schmidinger at cadsoft.de
Sun Dec 4 10:37:42 CET 2005


Johannes Stezenbach wrote:
> On Sat, Dec 03, 2005, Klaus Schmidinger wrote:
> 
>>(AFAIK with NPTL all threads
>>of a given program have the same pid, so you won't be able to
>>distinguish them in 'top').
> 
> 
> This is not entirely true, you can still see and distinguish
> the threads in htop or "ps -T u -C vdr" etc. (top does not work).
> 
> The patch below might help, gettid() returns the PID of the thread. (And
> since it's a syscall it is independent of NPTL vs. linuxthreads. Tested
> on 2.6 only, but the gettid man page says it's available in 2.4.20.
> gettid() is Linux specific.)

Does this "gettid" call return a different tid than "pthread_self()"?

I'm just wondering because the introduction of "pthread_self()" was one
of the things we had to change to make VDR run with NPTL...

Klaus

> Johannes
> 
> --- vdr-1.3.37/thread.c.orig	2005-12-03 19:52:38.000000000 +0100
> +++ vdr-1.3.37/thread.c	2005-12-03 20:12:47.000000000 +0100
> @@ -17,6 +17,11 @@
>  #include <unistd.h>
>  #include "tools.h"
>  
> +static inline pid_t gettid(void)
> +{
> +  return (pid_t) syscall(224);
> +}
> +
>  static bool GetAbsTime(struct timespec *Abstime, int MillisecondsFromNow)
>  {
>    struct timeval now;
> @@ -231,10 +236,10 @@ void cThread::SetDescription(const char 
>  void *cThread::StartThread(cThread *Thread)
>  {
>    if (Thread->description)
> -     dsyslog("%s thread started (pid=%d, tid=%ld)", Thread->description, getpid(), pthread_self());
> +     dsyslog("%s thread started (pid=%d, tid=%d)", Thread->description, getpid(), gettid());
>    Thread->Action();
>    if (Thread->description)
> -     dsyslog("%s thread ended (pid=%d, tid=%ld)", Thread->description, getpid(), pthread_self());
> +     dsyslog("%s thread ended (pid=%d, tid=%d)", Thread->description, getpid(), gettid());
>    Thread->running = false;
>    Thread->active = false;
>    return NULL;




More information about the vdr mailing list