From 7cb2fb119b998c1af2d9a210669388c6e04d6e62 Mon Sep 17 00:00:00 2001 From: leslie Date: Tue, 8 Sep 2009 07:48:12 +0800 Subject: [PATCH] cardclient-cccam2: fix cancel reader thread --- systems/cardclient/cccam2.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/systems/cardclient/cccam2.c b/systems/cardclient/cccam2.c index b82ea30..fbafb77 100644 --- a/systems/cardclient/cccam2.c +++ b/systems/cardclient/cccam2.c @@ -441,6 +441,7 @@ private: unsigned char cw[16]; cMutex cwmutex; cCondVar cwwait; + tThreadId readerTid; // void PacketAnalyzer(const struct CmdHeader *hdr, int length); protected: @@ -459,9 +460,9 @@ static cCardClientLinkReg __ncd("cccam2"); cCardClientCCcam2::cCardClientCCcam2(const char *Name) :cCardClient(Name) -,cThread("CCcam2 listener") +,cThread("CCcam2 reader") { - shareid=0; newcw=login=false; + shareid=0; readerTid=0; newcw=login=false; so.SetRWTimeout(10*1000); } @@ -589,7 +590,8 @@ bool cCardClientCCcam2::Init(const char *config) void cCardClientCCcam2::Logout(void) { login=false; - Cancel(3); + Cancel(cThread::ThreadId()!=readerTid ? 2:-1); + readerTid=0; cCardClient::Logout(); } @@ -753,6 +755,7 @@ bool cCardClientCCcam2::ProcessECM(const cEcmInfo *ecm, const unsigned char *dat void cCardClientCCcam2::Action(void) { + readerTid=cThread::ThreadId(); int cnt=0; while(Running() && so.Connected()) { unsigned char recvbuff[1024]; @@ -775,4 +778,5 @@ void cCardClientCCcam2::Action(void) memmove(recvbuff,recvbuff+proc,cnt); usleep(10); } + readerTid=0; } -- 2.39.5