diff options
author | Jochen Dolze <vdr@dolze.de> | 2010-03-26 23:03:00 +0100 |
---|---|---|
committer | Jochen Dolze <vdr@dolze.de> | 2010-03-26 23:03:00 +0100 |
commit | 9d00888b7602718f6b6954a51a8bfd468b5573fb (patch) | |
tree | 1349a0732047529fd2ae9e92aede42ca548bf3b2 /queue.cpp | |
parent | b445c3bdbb6b222468052be12ee36422a99a8323 (diff) | |
download | vdr-plugin-markad-9d00888b7602718f6b6954a51a8bfd468b5573fb.tar.gz vdr-plugin-markad-9d00888b7602718f6b6954a51a8bfd468b5573fb.tar.bz2 |
Fixed buffer full bug, added queue debugging (-v -v)
Diffstat (limited to 'queue.cpp')
-rw-r--r-- | queue.cpp | 31 |
1 files changed, 26 insertions, 5 deletions
@@ -14,17 +14,29 @@ cMarkAdPaketQueue::cMarkAdPaketQueue(const char *Name, int Size) memset(&pktinfo,0,sizeof(pktinfo)); pktinfo.pkthdr=-1; maxqueue=Size; - name=strdup(Name); + if (Name) + { + name=strdup(Name); + } + else + { + name=NULL; + } buffer=(uchar *) malloc(Size+1); if (!buffer) maxqueue=0; scanner=0xFFFFFFFF; scannerstart=-1; percent=-1; + mpercent=0; } cMarkAdPaketQueue::~cMarkAdPaketQueue() { - if (name) free(name); + if (name) + { + tsyslog("buffer usage: %-15s %3i%%",name,mpercent); + free(name); + } if (buffer) free(buffer); } @@ -67,16 +79,25 @@ bool cMarkAdPaketQueue::Put(uchar *Data, int Size) if (!buffer) return false; if ((inptr) && (inptr==outptr)) inptr=outptr=0; - if (((inptr+Size)>maxqueue) && (name)) + if ((inptr+Size)>maxqueue) { - esyslog("buffer %s full",name); - inptr=outptr=0; + if (name) + { + esyslog("buffer %s full",name); + } + else + { + esyslog("buffer full"); + } + Clear(); + return false; } memcpy(&buffer[inptr],Data,Size); inptr+=Size; int npercent=(int) ((inptr*100)/maxqueue); + if (npercent>mpercent) mpercent=npercent; if ((npercent>90) && (name) && (npercent!=percent)) { |