summaryrefslogtreecommitdiff
path: root/queue.cpp
diff options
context:
space:
mode:
authorJochen Dolze <vdr@dolze.de>2010-03-26 23:03:00 +0100
committerJochen Dolze <vdr@dolze.de>2010-03-26 23:03:00 +0100
commit9d00888b7602718f6b6954a51a8bfd468b5573fb (patch)
tree1349a0732047529fd2ae9e92aede42ca548bf3b2 /queue.cpp
parentb445c3bdbb6b222468052be12ee36422a99a8323 (diff)
downloadvdr-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.cpp31
1 files changed, 26 insertions, 5 deletions
diff --git a/queue.cpp b/queue.cpp
index fd015b2..a50e925 100644
--- a/queue.cpp
+++ b/queue.cpp
@@ -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))
{