From 99e3c093f404b55683a90e38bbe74e1f51c35316 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Mon, 31 Oct 2005 18:00:00 +0100 Subject: =?UTF-8?q?Version=201.3.35=20-=20Updated=20'sources.conf'=20(than?= =?UTF-8?q?ks=20to=20Philip=20Prindeville).=20-=20Now=20using=20daemon()?= =?UTF-8?q?=20instead=20of=20fork()=20to=20run=20VDR=20in=20daemon=20mode?= =?UTF-8?q?=20(thanks=20to=20=20=20Enrico=20Scholz).=20-=20Fixed=20a=20pos?= =?UTF-8?q?sible=20endless=20loop=20in=20a=20menu=20with=20no=20selectable?= =?UTF-8?q?=20items=20if=20=20=20Setup.MenuScrollWrap=20is=20true=20(thank?= =?UTF-8?q?s=20to=20Enrico=20Scholz).=20-=20Making=20sure=20no=20item=20is?= =?UTF-8?q?=20displayed=20as=20"current"=20if=20Up,=20Down,=20Left=20or=20?= =?UTF-8?q?Right=20is=20=20=20pressed=20in=20a=20menu=20with=20no=20select?= =?UTF-8?q?able=20items.=20-=20Added=20'=5F=5Fattribute=5F=5F'=20to=20func?= =?UTF-8?q?tions=20that=20use=20printf()=20like=20parameters=20(thanks=20?= =?UTF-8?q?=20=20to=20Darren=20Salt).=20-=20Updated=20the=20Finnish=20OSD?= =?UTF-8?q?=20texts=20(thanks=20to=20Rolf=20Ahrenberg).=20-=20Fixed=20a=20?= =?UTF-8?q?leftover=20'summary.vdr'=20in=20vdr.1=20(reported=20by=20Christ?= =?UTF-8?q?oph=20Hermanns).=20-=20Added=20more=20error=20messages=20and=20?= =?UTF-8?q?line=20numbers=20when=20reading=20EPG=20data=20and=20info.vdr?= =?UTF-8?q?=20=20=20(thanks=20to=20Peter=20Bieringer).=20-=20Updated=20the?= =?UTF-8?q?=20Danish=20OSD=20texts=20(thanks=20to=20Mogens=20Elneff).=20-?= =?UTF-8?q?=20Updated=20the=20Estonian=20OSD=20texts=20(thanks=20to=20Arth?= =?UTF-8?q?ur=20Konovalov).=20-=20Added=20missing=20mutex=20locks=20to=20c?= =?UTF-8?q?CiMenu::Abort()=20and=20cCiEnquiry::Abort()=20(reported=20=20?= =?UTF-8?q?=20by=20Marco=20Schl=C3=BC=C3=9Fler).=20-=20Fixed=20lock=20hand?= =?UTF-8?q?ling=20in=20CAM=20communication=20to=20avoid=20problems=20with?= =?UTF-8?q?=20multiple=20CAMs=20=20=20per=20device=20or=20CAMs=20with=20mo?= =?UTF-8?q?re=20than=20one=20smart=20card.=20-=20Updated=20the=20Greek=20O?= =?UTF-8?q?SD=20texts=20(thanks=20to=20Dimitrios=20Dimitrakos).=20-=20Upda?= =?UTF-8?q?ted=20the=20French=20OSD=20texts=20(thanks=20to=20Nicolas=20Hui?= =?UTF-8?q?llard).=20-=20Fixed=20the=20cFilter=20example=20in=20PLUGINS.ht?= =?UTF-8?q?ml=20(reported=20by=20Patrick=20Fischer).=20-=20The=20new=20cla?= =?UTF-8?q?ss=20cUnbufferedFile=20is=20used=20for=20the=20recording=20file?= =?UTF-8?q?s=20to=20avoid=20=20=20trashing=20the=20file=20system=20cache?= =?UTF-8?q?=20(based=20on=20a=20patch=20by=20Ralf=20M=C3=BCller).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ci.c | 47 +++++++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 18 deletions(-) (limited to 'ci.c') diff --git a/ci.c b/ci.c index 9e86c61..4e63fde 100644 --- a/ci.c +++ b/ci.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: ci.c 1.36 2005/10/03 12:58:22 kls Exp $ + * $Id: ci.c 1.38 2005/10/30 13:04:10 kls Exp $ */ #include "ci.h" @@ -156,7 +156,7 @@ public: uint8_t Status(void); int Write(int fd); int Read(int fd); - void Dump(bool Outgoing); + void Dump(int fd, bool Outgoing); }; cTPDU::cTPDU(uint8_t Slot, uint8_t Tcid, uint8_t Tag, int Length, const uint8_t *Data) @@ -207,9 +207,9 @@ cTPDU::cTPDU(uint8_t Slot, uint8_t Tcid, uint8_t Tag, int Length, const uint8_t int cTPDU::Write(int fd) { - Dump(true); + Dump(fd, true); if (size) - return write(fd, data, size) == size ? OK : ERROR; + return safe_write(fd, data, size) == size ? OK : ERROR; esyslog("ERROR: attemp to write TPDU with zero size"); return ERROR; } @@ -222,20 +222,20 @@ int cTPDU::Read(int fd) size = 0; return ERROR; } - Dump(false); + Dump(fd, false); return OK; } -void cTPDU::Dump(bool Outgoing) +void cTPDU::Dump(int fd, bool Outgoing) { if (DumpTPDUDataTransfer) { #define MAX_DUMP 256 - fprintf(stderr, "%s ", Outgoing ? "-->" : "<--"); + fprintf(stderr, "%2d %s ", fd, Outgoing ? "-->" : "<--"); for (int i = 0; i < size && i < MAX_DUMP; i++) fprintf(stderr, "%02X ", data[i]); fprintf(stderr, "%s\n", size >= MAX_DUMP ? "..." : ""); if (!Outgoing) { - fprintf(stderr, " "); + fprintf(stderr, " "); for (int i = 0; i < size && i < MAX_DUMP; i++) fprintf(stderr, "%2c ", isprint(data[i]) ? data[i] : '.'); fprintf(stderr, "%s\n", size >= MAX_DUMP ? "..." : ""); @@ -1048,12 +1048,12 @@ cCiMMI::cCiMMI(int SessionId, cCiTransportConnection *Tc) cCiMMI::~cCiMMI() { if (fetchedMenu) { - cMutexLock MutexLock(&fetchedMenu->mutex); + cMutexLock MutexLock(fetchedMenu->mutex); fetchedMenu->mmi = NULL; } delete menu; if (fetchedEnquiry) { - cMutexLock MutexLock(&fetchedEnquiry->mutex); + cMutexLock MutexLock(fetchedEnquiry->mutex); fetchedEnquiry->mmi = NULL; } delete enquiry; @@ -1227,7 +1227,7 @@ cCiMenu::cCiMenu(cCiMMI *MMI, bool Selectable) cCiMenu::~cCiMenu() { - cMutexLock MutexLock(&mutex); + cMutexLock MutexLock(mutex); if (mmi) mmi->Menu(true); free(titleText); @@ -1254,7 +1254,8 @@ bool cCiMenu::HasUpdate(void) bool cCiMenu::Select(int Index) { - cMutexLock MutexLock(&mutex); + cMutexLock MutexLock(mutex); + dbgprotocol("%d: ==> Select %d\n", mmi ? mmi->SessionId() : -1, Index); if (mmi && -1 <= Index && Index < numEntries) return mmi->SendMenuAnswer(Index + 1); return false; @@ -1267,6 +1268,7 @@ bool cCiMenu::Cancel(void) bool cCiMenu::Abort(void) { + cMutexLock MutexLock(mutex); return mmi && mmi->SendCloseMMI(); } @@ -1282,7 +1284,7 @@ cCiEnquiry::cCiEnquiry(cCiMMI *MMI) cCiEnquiry::~cCiEnquiry() { - cMutexLock MutexLock(&mutex); + cMutexLock MutexLock(mutex); if (mmi) mmi->Enquiry(true); free(text); @@ -1290,7 +1292,7 @@ cCiEnquiry::~cCiEnquiry() bool cCiEnquiry::Reply(const char *s) { - cMutexLock MutexLock(&mutex); + cMutexLock MutexLock(mutex); return mmi ? mmi->SendAnswer(s) : false; } @@ -1301,6 +1303,7 @@ bool cCiEnquiry::Cancel(void) bool cCiEnquiry::Abort(void) { + cMutexLock MutexLock(mutex); return mmi && mmi->SendCloseMMI(); } @@ -1617,8 +1620,12 @@ cCiMenu *cCiHandler::GetMenu(void) cMutexLock MutexLock(&mutex); for (int Slot = 0; Slot < numSlots; Slot++) { cCiMMI *mmi = (cCiMMI *)GetSessionByResourceId(RI_MMI, Slot); - if (mmi) - return mmi->Menu(); + if (mmi) { + cCiMenu *Menu = mmi->Menu(); + if (Menu) + Menu->mutex = &mutex; + return Menu; + } } return NULL; } @@ -1628,8 +1635,12 @@ cCiEnquiry *cCiHandler::GetEnquiry(void) cMutexLock MutexLock(&mutex); for (int Slot = 0; Slot < numSlots; Slot++) { cCiMMI *mmi = (cCiMMI *)GetSessionByResourceId(RI_MMI, Slot); - if (mmi) - return mmi->Enquiry(); + if (mmi) { + cCiEnquiry *Enquiry = mmi->Enquiry(); + if (Enquiry) + Enquiry->mutex = &mutex; + return Enquiry; + } } return NULL; } -- cgit v1.2.3