summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <kls (at) cadsoft (dot) de>2003-10-26 17:00:00 +0100
committerKlaus Schmidinger <kls (at) cadsoft (dot) de>2003-10-26 17:00:00 +0100
commitd62fbea7bad99cfa34ec42a678d4cf38ec1593d8 (patch)
treed34a37b6f5c4ffa85e1841e89bf099a8a32ddfa5
parent646369955d2e954edf8b5c78f9ba4dc7f501f292 (diff)
downloadvdr-patch-lnbsharing-d62fbea7bad99cfa34ec42a678d4cf38ec1593d8.tar.gz
vdr-patch-lnbsharing-d62fbea7bad99cfa34ec42a678d4cf38ec1593d8.tar.bz2
Version 1.2.6pre4vdr-1.2.6pre4
- Fixed handling CAM menus in case the CAM connection fails while the menu is being presented (thanks to Thomas v. Keller for reportign this one). - Added missing 'const' to some cChannel member functions (thanks to Torsten Herz).
-rw-r--r--CONTRIBUTORS5
-rw-r--r--HISTORY7
-rw-r--r--channels.h8
-rw-r--r--ci.c54
-rw-r--r--ci.h4
-rw-r--r--config.h4
6 files changed, 60 insertions, 22 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 3c86eee..1a36bdf 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -641,6 +641,7 @@ Torsten Herz <torsten.herz@web.de>
to switch to an other channel
for reporting a wrong EPG bugfix code number for the MAX_USEFUL_SUBTITLE_LENGTH fix
for fixing a bug in resetting OSD color palettes
+ for adding missing 'const' to some cChannel member functions
Steffen Becker <stbecker@rbg.informatik.tu-darmstadt.de>
for reporting a problem with CPU load peaks (in the EPG scanner)
@@ -844,3 +845,7 @@ Markus Hardt <markus.hardt@gmx.net>
Thomas Rausch <Thomas.Rausch@gmx.de>
for making VDR try to get a timer's channel without RID when loading 'timers.conf'
+
+Thomas v. Keller <v.keller@neckarufer.de>
+ for reporting a crash in case the CAM connection fails while a CAM menu
+ is being presented
diff --git a/HISTORY b/HISTORY
index d121437..143a443 100644
--- a/HISTORY
+++ b/HISTORY
@@ -2444,3 +2444,10 @@ Video Disk Recorder Revision History
- Continuing learning remote control keys in case one rc fails (thanks to
Oliver Endriss).
- Fixed handling comments in editing marks.
+
+2003-10-26: Version 1.2.6pre4
+
+- Fixed handling CAM menus in case the CAM connection fails while the menu
+ is being presented (thanks to Thomas v. Keller for reportign this one).
+- Added missing 'const' to some cChannel member functions (thanks to Torsten
+ Herz).
diff --git a/channels.h b/channels.h
index ca76af1..a6cc978 100644
--- a/channels.h
+++ b/channels.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: channels.h 1.8 2003/08/16 09:12:15 kls Exp $
+ * $Id: channels.h 1.9 2003/10/26 13:21:59 kls Exp $
*/
#ifndef __CHANNELS_H
@@ -119,9 +119,9 @@ public:
int Transmission(void) const { return transmission; }
int Guard(void) const { return guard; }
int Hierarchy(void) const { return hierarchy; }
- bool IsCable(void) { return (source & cSource::st_Mask) == cSource::stCable; }
- bool IsSat(void) { return (source & cSource::st_Mask) == cSource::stSat; }
- bool IsTerr(void) { return (source & cSource::st_Mask) == cSource::stTerr; }
+ bool IsCable(void) const { return (source & cSource::st_Mask) == cSource::stCable; }
+ bool IsSat(void) const { return (source & cSource::st_Mask) == cSource::stSat; }
+ bool IsTerr(void) const { return (source & cSource::st_Mask) == cSource::stTerr; }
tChannelID GetChannelID(void) const;
};
diff --git a/ci.c b/ci.c
index e94c20a..889c853 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.16 2003/08/02 10:00:01 kls Exp $
+ * $Id: ci.c 1.17 2003/10/26 13:04:23 kls Exp $
*/
/* XXX TODO
@@ -1004,15 +1004,15 @@ bool cCiDateTime::Process(int Length, const uint8_t *Data)
class cCiMMI : public cCiSession {
private:
char *GetText(int &Length, const uint8_t **Data);
- cCiMenu *menu;
- cCiEnquiry *enquiry;
+ cCiMenu *menu, *fetchedMenu;
+ cCiEnquiry *enquiry, *fetchedEnquiry;
public:
cCiMMI(int SessionId, cCiTransportConnection *Tc);
virtual ~cCiMMI();
virtual bool Process(int Length = 0, const uint8_t *Data = NULL);
virtual bool HasUserIO(void) { return menu || enquiry; }
- cCiMenu *Menu(void);
- cCiEnquiry *Enquiry(void);
+ cCiMenu *Menu(bool Clear = false);
+ cCiEnquiry *Enquiry(bool Clear = false);
bool SendMenuAnswer(uint8_t Selection);
bool SendAnswer(const char *Text);
};
@@ -1021,13 +1021,21 @@ cCiMMI::cCiMMI(int SessionId, cCiTransportConnection *Tc)
:cCiSession(SessionId, RI_MMI, Tc)
{
dbgprotocol("New MMI (session id %d)\n", SessionId);
- menu = NULL;
- enquiry = NULL;
+ menu = fetchedMenu = NULL;
+ enquiry = fetchedEnquiry = NULL;
}
cCiMMI::~cCiMMI()
{
+ if (fetchedMenu) {
+ cMutexLock MutexLock(&fetchedMenu->mutex);
+ fetchedMenu->mmi = NULL;
+ }
delete menu;
+ if (fetchedEnquiry) {
+ cMutexLock MutexLock(&fetchedEnquiry->mutex);
+ fetchedEnquiry->mmi = NULL;
+ }
delete enquiry;
}
@@ -1123,18 +1131,26 @@ bool cCiMMI::Process(int Length, const uint8_t *Data)
return true;
}
-cCiMenu *cCiMMI::Menu(void)
+cCiMenu *cCiMMI::Menu(bool Clear)
{
- cCiMenu *m = menu;
- menu = NULL;
- return m;
+ if (Clear)
+ fetchedMenu = NULL;
+ else if (menu) {
+ fetchedMenu = menu;
+ menu = NULL;
+ }
+ return fetchedMenu;
}
-cCiEnquiry *cCiMMI::Enquiry(void)
+cCiEnquiry *cCiMMI::Enquiry(bool Clear)
{
- cCiEnquiry *e = enquiry;
- enquiry = NULL;
- return e;
+ if (Clear)
+ fetchedEnquiry = NULL;
+ else if (enquiry) {
+ fetchedEnquiry = enquiry;
+ enquiry = NULL;
+ }
+ return fetchedEnquiry;
}
bool cCiMMI::SendMenuAnswer(uint8_t Selection)
@@ -1170,6 +1186,9 @@ cCiMenu::cCiMenu(cCiMMI *MMI, bool Selectable)
cCiMenu::~cCiMenu()
{
+ cMutexLock MutexLock(&mutex);
+ if (mmi)
+ mmi->Menu(true);
free(titleText);
free(subTitleText);
free(bottomText);
@@ -1188,6 +1207,7 @@ bool cCiMenu::AddEntry(char *s)
bool cCiMenu::Select(int Index)
{
+ cMutexLock MutexLock(&mutex);
if (mmi && -1 <= Index && Index < numEntries)
return mmi->SendMenuAnswer(Index + 1);
return false;
@@ -1210,11 +1230,15 @@ cCiEnquiry::cCiEnquiry(cCiMMI *MMI)
cCiEnquiry::~cCiEnquiry()
{
+ cMutexLock MutexLock(&mutex);
+ if (mmi)
+ mmi->Enquiry(true);
free(text);
}
bool cCiEnquiry::Reply(const char *s)
{
+ cMutexLock MutexLock(&mutex);
return mmi ? mmi->SendAnswer(s) : false;
}
diff --git a/ci.h b/ci.h
index 62046e5..6b81a18 100644
--- a/ci.h
+++ b/ci.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: ci.h 1.8 2003/05/25 11:44:47 kls Exp $
+ * $Id: ci.h 1.9 2003/10/26 12:22:09 kls Exp $
*/
#ifndef __CI_H
@@ -21,6 +21,7 @@ class cCiMenu {
private:
enum { MAX_CIMENU_ENTRIES = 64 }; ///< XXX is there a specified maximum?
cCiMMI *mmi;
+ cMutex mutex;
bool selectable;
char *titleText;
char *subTitleText;
@@ -45,6 +46,7 @@ class cCiEnquiry {
friend class cCiMMI;
private:
cCiMMI *mmi;
+ cMutex mutex;
char *text;
bool blind;
int expectedLength;
diff --git a/config.h b/config.h
index 625e3e6..3771ce1 100644
--- a/config.h
+++ b/config.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: config.h 1.176.1.2 2003/10/24 14:31:17 kls Exp $
+ * $Id: config.h 1.176.1.3 2003/10/26 13:30:36 kls Exp $
*/
#ifndef __CONFIG_H
@@ -19,7 +19,7 @@
#include "device.h"
#include "tools.h"
-#define VDRVERSION "1.2.6pre3"
+#define VDRVERSION "1.2.6pre4"
#define VDRVERSNUM 10206 // Version * 10000 + Major * 100 + Minor
#define MAXPRIORITY 99