summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--HISTORY7
-rw-r--r--cutter.c6
-rw-r--r--device.c8
-rw-r--r--dvbdevice.c5
-rw-r--r--dvbplayer.c10
-rw-r--r--eit.c7
-rw-r--r--lirc.c5
-rw-r--r--rcu.c5
-rw-r--r--recorder.c7
-rw-r--r--remote.c5
-rw-r--r--thread.c25
-rw-r--r--thread.h6
-rw-r--r--transfer.c7
13 files changed, 56 insertions, 47 deletions
diff --git a/HISTORY b/HISTORY
index f65a97ab..03368edf 100644
--- a/HISTORY
+++ b/HISTORY
@@ -2438,3 +2438,10 @@ Video Disk Recorder Revision History
- Changed thread handling to make it work with NPTL ("Native Posix Thread Library").
Thanks to Jon Burgess, Andreas Schultz, Werner Fink and Stefan Huelswitt.
+- The cThread class now accepts a 'Description' parameter, which is used to log
+ the beginning and end of the thread, together with its process and thread id.
+ For descriptions that need additional parameters you can use the function
+ cThread::SetDescription(), which accepts 'printf()' like arguments.
+ Existing plugins that use threads should be changed to use this functionality
+ instead of explicit 'dsyslog()' calls inside their Action() function in order
+ to support logging the thread ids.
diff --git a/cutter.c b/cutter.c
index dfad77e4..25169a2a 100644
--- a/cutter.c
+++ b/cutter.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: cutter.c 1.5 2003/08/17 09:04:04 kls Exp $
+ * $Id: cutter.c 1.6 2003/10/18 11:29:37 kls Exp $
*/
#include "cutter.h"
@@ -32,6 +32,7 @@ public:
};
cCuttingThread::cCuttingThread(const char *FromFileName, const char *ToFileName)
+:cThread("video cutting")
{
error = NULL;
active = false;
@@ -62,8 +63,6 @@ cCuttingThread::~cCuttingThread()
void cCuttingThread::Action(void)
{
- dsyslog("video cutting thread started (pid=%d)", getpid());
-
cMark *Mark = fromMarks.First();
if (Mark) {
fromFile = fromFileName->Open();
@@ -175,7 +174,6 @@ void cCuttingThread::Action(void)
}
else
esyslog("no editing marks found!");
- dsyslog("end video cutting thread");
}
// --- cCutter ---------------------------------------------------------------
diff --git a/device.c b/device.c
index b409ac0e..715c7ec1 100644
--- a/device.c
+++ b/device.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: device.c 1.47 2003/08/15 12:34:36 kls Exp $
+ * $Id: device.c 1.48 2003/10/18 12:19:39 kls Exp $
*/
#include "device.h"
@@ -36,6 +36,8 @@ cDevice::cDevice(void)
{
cardIndex = nextCardIndex++;
+ SetDescription("receiver on device %d", CardIndex() + 1);
+
SetVideoFormat(Setup.VideoFormat);
active = false;
@@ -665,8 +667,6 @@ bool cDevice::Receiving(bool CheckAny) const
void cDevice::Action(void)
{
- dsyslog("receiver thread started on device %d (pid=%d)", CardIndex() + 1, getpid());
-
if (OpenDvr()) {
active = true;
for (; active;) {
@@ -689,8 +689,6 @@ void cDevice::Action(void)
}
CloseDvr();
}
-
- dsyslog("receiver thread ended on device %d (pid=%d)", CardIndex() + 1, getpid());
}
bool cDevice::OpenDvr(void)
diff --git a/dvbdevice.c b/dvbdevice.c
index fd0a0d0d..aed34931 100644
--- a/dvbdevice.c
+++ b/dvbdevice.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbdevice.c 1.67 2003/10/17 15:36:13 kls Exp $
+ * $Id: dvbdevice.c 1.68 2003/10/18 12:20:38 kls Exp $
*/
#include "dvbdevice.h"
@@ -100,6 +100,7 @@ cDvbTuner::cDvbTuner(int Fd_Frontend, int CardIndex, fe_type_t FrontendType, cCi
useCa = false;
tunerStatus = tsIdle;
startTime = time(NULL);
+ SetDescription("tuner on device %d", cardIndex + 1);
Start();
}
@@ -247,7 +248,6 @@ bool cDvbTuner::SetFrontend(void)
void cDvbTuner::Action(void)
{
- dsyslog("tuner thread started on device %d (pid=%d)", cardIndex + 1, getpid());
active = true;
while (active) {
cMutexLock MutexLock(&mutex);
@@ -302,7 +302,6 @@ void cDvbTuner::Action(void)
// in the beginning we loop more often to let the CAM connection start up fast
newSet.TimedWait(mutex, (ciHandler && (time(NULL) - startTime < 20)) ? 100 : 1000);
}
- dsyslog("tuner thread ended on device %d (pid=%d)", cardIndex + 1, getpid());
}
// --- cDvbDevice ------------------------------------------------------------
diff --git a/dvbplayer.c b/dvbplayer.c
index 6b7fe076..c3bd542d 100644
--- a/dvbplayer.c
+++ b/dvbplayer.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbplayer.c 1.22 2003/05/24 09:04:26 kls Exp $
+ * $Id: dvbplayer.c 1.23 2003/10/18 11:31:54 kls Exp $
*/
#include "dvbplayer.h"
@@ -93,6 +93,7 @@ public:
};
cNonBlockingFileReader::cNonBlockingFileReader(void)
+:cThread("non blocking file reader")
{
f = -1;
buffer = NULL;
@@ -146,7 +147,6 @@ int cNonBlockingFileReader::Read(int FileHandle, uchar *Buffer, int Length)
void cNonBlockingFileReader::Action(void)
{
- dsyslog("non blocking file reader thread started (pid=%d)", getpid());
active = true;
while (active) {
cMutexLock MutexLock(&mutex);
@@ -165,7 +165,6 @@ void cNonBlockingFileReader::Action(void)
}
newSet.TimedWait(mutex, 1000);
}
- dsyslog("non blocking file reader thread ended (pid=%d)", getpid());
}
// --- cDvbPlayer ------------------------------------------------------------
@@ -235,6 +234,7 @@ public:
int cDvbPlayer::Speeds[] = { 0, -2, -4, -8, 1, 2, 4, 12, 0 };
cDvbPlayer::cDvbPlayer(const char *FileName)
+:cThread("dvbplayer")
{
nonBlockingFileReader = NULL;
ringBuffer = NULL;
@@ -405,8 +405,6 @@ void cDvbPlayer::Activate(bool On)
void cDvbPlayer::Action(void)
{
- dsyslog("dvbplayer thread started (pid=%d)", getpid());
-
uchar *b = NULL;
uchar *p = NULL;
int pc = 0;
@@ -550,8 +548,6 @@ void cDvbPlayer::Action(void)
cNonBlockingFileReader *nbfr = nonBlockingFileReader;
nonBlockingFileReader = NULL;
delete nbfr;
-
- dsyslog("dvbplayer thread ended (pid=%d)", getpid());
}
void cDvbPlayer::Pause(void)
diff --git a/eit.c b/eit.c
index 8e0ade7c..bb5b856a 100644
--- a/eit.c
+++ b/eit.c
@@ -16,7 +16,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
- * $Id: eit.c 1.80 2003/10/12 11:05:42 kls Exp $
+ * $Id: eit.c 1.81 2003/10/18 12:24:18 kls Exp $
***************************************************************************/
#include "eit.h"
@@ -1075,6 +1075,7 @@ time_t cSIProcessor::lastDump = time(NULL);
/** */
cSIProcessor::cSIProcessor(const char *FileName)
+:cThread("EIT processing")
{
fileName = strdup(FileName);
masterSIProcessor = numSIProcessors == 0; // the first one becomes the 'master'
@@ -1179,8 +1180,6 @@ information and let the classes corresponding
to the tables write their information to the disk */
void cSIProcessor::Action()
{
- dsyslog("EIT processing thread started (pid=%d)%s", getpid(), masterSIProcessor ? " - master" : "");
-
time_t lastCleanup = time(NULL);
time_t lastPmtScan = time(NULL);
@@ -1342,8 +1341,6 @@ void cSIProcessor::Action()
}
}
}
-
- dsyslog("EIT processing thread ended (pid=%d)%s", getpid(), masterSIProcessor ? " - master" : "");
}
/** Add a filter with packet identifier pid and
diff --git a/lirc.c b/lirc.c
index 0774cf81..d1aa4e59 100644
--- a/lirc.c
+++ b/lirc.c
@@ -6,7 +6,7 @@
*
* LIRC support added by Carsten Koch <Carsten.Koch@icem.de> 2000-06-16.
*
- * $Id: lirc.c 1.6 2003/04/27 11:39:47 kls Exp $
+ * $Id: lirc.c 1.7 2003/10/18 11:34:02 kls Exp $
*/
#include "lirc.h"
@@ -20,6 +20,7 @@
cLircRemote::cLircRemote(char *DeviceName)
:cRemote("LIRC")
+,cThread("LIRC remote control")
{
struct sockaddr_un addr;
addr.sun_family = AF_UNIX;
@@ -49,8 +50,6 @@ bool cLircRemote::Ready(void)
void cLircRemote::Action(void)
{
- dsyslog("LIRC remote control thread started (pid=%d)", getpid());
-
int FirstTime = 0;
int LastTime = 0;
char buf[LIRC_BUFFER_SIZE];
diff --git a/rcu.c b/rcu.c
index dae9b2a1..43dc480a 100644
--- a/rcu.c
+++ b/rcu.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: rcu.c 1.5 2003/05/02 14:42:40 kls Exp $
+ * $Id: rcu.c 1.6 2003/10/18 11:34:30 kls Exp $
*/
#include "rcu.h"
@@ -18,6 +18,7 @@
cRcuRemote::cRcuRemote(char *DeviceName)
:cRemote("RCU")
+,cThread("RCU remote control")
{
dp = 0;
mode = modeB;
@@ -92,8 +93,6 @@ void cRcuRemote::Action(void)
} buffer;
#pragma pack()
- dsyslog("RCU remote control thread started (pid=%d)", getpid());
-
time_t LastCodeRefresh = 0;
int FirstTime = 0;
uint64 LastCommand = 0;
diff --git a/recorder.c b/recorder.c
index 2583bae2..c46c5651 100644
--- a/recorder.c
+++ b/recorder.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: recorder.c 1.7 2003/08/02 13:01:19 kls Exp $
+ * $Id: recorder.c 1.8 2003/10/18 11:35:02 kls Exp $
*/
#include <stdarg.h>
@@ -25,6 +25,7 @@
cRecorder::cRecorder(const char *FileName, int Ca, int Priority, int VPid, int APid1, int APid2, int DPid1, int DPid2)
:cReceiver(Ca, Priority, 5, VPid, APid1, APid2, DPid1, DPid2)
+,cThread("recording")
{
ringBuffer = NULL;
remux = NULL;
@@ -106,8 +107,6 @@ void cRecorder::Receive(uchar *Data, int Length)
void cRecorder::Action(void)
{
- dsyslog("recording thread started (pid=%d)", getpid());
-
time_t t = time(NULL);
active = true;
while (active) {
@@ -143,6 +142,4 @@ void cRecorder::Action(void)
else
usleep(1); // this keeps the CPU load low
}
-
- dsyslog("recording thread ended (pid=%d)", getpid());
}
diff --git a/remote.c b/remote.c
index 1b73d168..227f640c 100644
--- a/remote.c
+++ b/remote.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: remote.c 1.38 2003/05/02 10:49:50 kls Exp $
+ * $Id: remote.c 1.39 2003/10/18 11:35:32 kls Exp $
*/
#include "remote.h"
@@ -197,6 +197,7 @@ bool cKbdRemote::rawMode = false;
cKbdRemote::cKbdRemote(void)
:cRemote("KBD")
+,cThread("KBD remote control")
{
active = false;
tcgetattr(STDIN_FILENO, &savedTm);
@@ -245,7 +246,6 @@ int cKbdRemote::MapCodeToFunc(uint64 Code)
void cKbdRemote::Action(void)
{
- dsyslog("KBD remote control thread started (pid=%d)", getpid());
cPoller Poller(STDIN_FILENO);
active = true;
while (active) {
@@ -285,5 +285,4 @@ void cKbdRemote::Action(void)
}
}
}
- dsyslog("KBD remote control thread ended (pid=%d)", getpid());
}
diff --git a/thread.c b/thread.c
index f30e7cc1..49c01a24 100644
--- a/thread.c
+++ b/thread.c
@@ -4,12 +4,14 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: thread.c 1.26 2003/10/18 10:29:25 kls Exp $
+ * $Id: thread.c 1.27 2003/10/18 12:14:55 kls Exp $
*/
#include "thread.h"
#include <errno.h>
+#include <malloc.h>
#include <signal.h>
+#include <stdarg.h>
#include <sys/resource.h>
#include <sys/time.h>
#include <sys/wait.h>
@@ -118,7 +120,7 @@ void cMutex::Unlock(void)
bool cThread::signalHandlerInstalled = false;
bool cThread::emergencyExitRequested = false;
-cThread::cThread(void)
+cThread::cThread(const char *Description)
{
if (!signalHandlerInstalled) {
signal(SIGIO, SignalHandler);
@@ -126,10 +128,25 @@ cThread::cThread(void)
}
running = false;
parentTid = childTid = 0;
+ description = NULL;
+ SetDescription(Description);
}
cThread::~cThread()
{
+ free(description);
+}
+
+void cThread::SetDescription(const char *Description, ...)
+{
+ free(description);
+ description = NULL;
+ if (Description) {
+ va_list ap;
+ va_start(ap, Description);
+ vasprintf(&description, Description, ap);
+ va_end(ap);
+ }
}
void cThread::SignalHandler(int signum)
@@ -140,7 +157,11 @@ void cThread::SignalHandler(int signum)
void *cThread::StartThread(cThread *Thread)
{
Thread->childTid = pthread_self();
+ if (Thread->description)
+ dsyslog("%s thread started (pid=%d, tid=%ld)", Thread->description, getpid(), Thread->childTid);
Thread->Action();
+ if (Thread->description)
+ dsyslog("%s thread ended (pid=%d, tid=%ld)", Thread->description, getpid(), Thread->childTid);
Thread->childTid = 0;
return NULL;
}
diff --git a/thread.h b/thread.h
index 65c0d7c9..ec4e1395 100644
--- a/thread.h
+++ b/thread.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: thread.h 1.16 2003/10/18 10:29:25 kls Exp $
+ * $Id: thread.h 1.17 2003/10/18 12:13:10 kls Exp $
*/
#ifndef __THREAD_H
@@ -47,6 +47,7 @@ private:
pthread_t parentTid, childTid;
cMutex mutex;
bool running;
+ char *description;
static bool emergencyExitRequested;
static bool signalHandlerInstalled;
static void SignalHandler(int signum);
@@ -58,8 +59,9 @@ protected:
virtual void Action(void) = 0;
void Cancel(int WaitSeconds = 0);
public:
- cThread(void);
+ cThread(const char *Description = NULL);
virtual ~cThread();
+ void SetDescription(const char *Description, ...);
bool Start(void);
bool Active(void);
static bool EmergencyExit(bool Request = false);
diff --git a/transfer.c b/transfer.c
index 3e24dccd..1209dfca 100644
--- a/transfer.c
+++ b/transfer.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: transfer.c 1.14 2003/08/31 12:19:16 kls Exp $
+ * $Id: transfer.c 1.15 2003/10/18 11:36:03 kls Exp $
*/
#include "transfer.h"
@@ -19,6 +19,7 @@
cTransfer::cTransfer(int VPid, int APid1, int APid2, int DPid1, int DPid2)
:cReceiver(0, -1, 5, VPid, APid1, APid2, DPid1, DPid2)
+,cThread("transfer")
{
ringBuffer = new cRingBufferLinear(VIDEOBUFSIZE, TS_SIZE * 2, true);
remux = new cRemux(VPid, APid1, APid2, DPid1, DPid2);
@@ -66,8 +67,6 @@ void cTransfer::Receive(uchar *Data, int Length)
void cTransfer::Action(void)
{
- dsyslog("transfer thread started (pid=%d)", getpid());
-
int PollTimeouts = 0;
active = true;
while (active) {
@@ -125,8 +124,6 @@ void cTransfer::Action(void)
else
usleep(1); // this keeps the CPU load low
}
-
- dsyslog("transfer thread ended (pid=%d)", getpid());
}
void cTransfer::StripAudioPackets(uchar *b, int Length, uchar Except)