From 11e6dac31a27d3ab889d3bfa52e9dee9d703216d Mon Sep 17 00:00:00 2001 From: leslie Date: Wed, 5 Aug 2009 21:27:29 +0800 Subject: [PATCH] cardclient-cccam2: limit max ECM processing time --- systems/cardclient/cccam2.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/systems/cardclient/cccam2.c b/systems/cardclient/cccam2.c index 7b61113..09390b2 100644 --- a/systems/cardclient/cccam2.c +++ b/systems/cardclient/cccam2.c @@ -227,7 +227,7 @@ public: // -- cShare ------------------------------------------------------------------- #define STDLAG 1000 -#define MAXLAG 7000 +#define MAXLAG 5000 class cShares; @@ -364,6 +364,8 @@ int cShares::GetShares(const cEcmInfo *ecm, cShares *ss) // -- cCardClientCCcam2 --------------------------------------------------------- +#define MAX_ECM_TIME (MAXLAG*3+2000) // ms + class cCardClientCCcam2 : public cCardClient , private cThread { private: cCCcamCrypt encr, decr; @@ -665,7 +667,8 @@ bool cCardClientCCcam2::ProcessECM(const cEcmInfo *ecm, const unsigned char *dat for(cShare *s=curr.First(); s; s=curr.Next(s)) PRINTF(L_CC_CCCAM2,"shareid %08x %c hops %d lag %4d: caid %04x",s->ShareID(),s->Status()>0?'+':(s->Status()<0?'-':' '),s->Hops(),s->Lag(),s->CaID()); } - for(cShare *s=curr.First(); s; s=curr.Next(s)) { + cTimeMs max(MAX_ECM_TIME); + for(cShare *s=curr.First(); s && !max.TimedOut(); s=curr.Next(s)) { if((shareid=s->ShareID())==0) continue; buffer[ECM_SHAREID_POS]=shareid>>24; buffer[ECM_SHAREID_POS+1]=shareid>>16; -- 2.39.5