diff options
author | Klaus Schmidinger <vdr@tvdr.de> | 2017-04-26 09:18:26 +0200 |
---|---|---|
committer | Klaus Schmidinger <vdr@tvdr.de> | 2017-04-26 09:18:26 +0200 |
commit | a1fda4f2182b99404cef8dca44e388d3482b2f69 (patch) | |
tree | fa39c30544b969a805baa8cbb811d068396cc903 | |
parent | 1a31974789d2e9e78f0ae6bc5ab776c0f8f1db6a (diff) | |
download | vdr-a1fda4f2182b99404cef8dca44e388d3482b2f69.tar.gz vdr-a1fda4f2182b99404cef8dca44e388d3482b2f69.tar.bz2 |
Fixed a possible crash when pulling the CAM while decrypting a channel with MTD (cont'd)
-rw-r--r-- | ci.c | 7 | ||||
-rw-r--r-- | mtd.c | 8 | ||||
-rw-r--r-- | mtd.h | 4 |
3 files changed, 15 insertions, 4 deletions
@@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: ci.c 4.12 2017/04/24 09:05:49 kls Exp $ + * $Id: ci.c 4.13 2017/04/26 09:18:26 kls Exp $ */ #include "ci.h" @@ -1971,7 +1971,10 @@ void cCamSlot::Process(cTPDU *TPDU) StopDecrypting(); DeleteAllConnections(); CancelActivation(); - MtdActivate(false); + if (mtdHandler) + mtdHandler->UnAssignAll(); + else + Assign(NULL); break; case msReset: dbgprotocol("Slot %d: module reset\n", slotNumber); @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: mtd.c 1.9 2017/03/27 14:26:04 kls Exp $ + * $Id: mtd.c 1.10 2017/04/26 08:33:54 kls Exp $ */ #include "mtd.h" @@ -136,6 +136,12 @@ bool cMtdHandler::Devices(cVector<int> &CardIndexes) return CardIndexes.Size() > 0; } +void cMtdHandler::UnAssignAll(void) +{ + for (int i = 0; i < camSlots.Size(); i++) + camSlots[i]->Assign(NULL); +} + // --- cMtdMapper ------------------------------------------------------------ #define MTD_INVALID_PID 0xFFFF @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: mtd.h 1.6 2017/03/27 08:30:00 kls Exp $ + * $Id: mtd.h 1.7 2017/04/26 09:17:08 kls Exp $ */ #ifndef __MTD_H @@ -140,6 +140,8 @@ public: ///< Adds the card indexes of the devices of any active MTD CAM slots to ///< the given CardIndexes. ///< Returns true if the array is not empty. + void UnAssignAll(void); + ///< Unassigns all MTD CAM slots from their devices. }; #define MTD_DONT_CALL(v) dsyslog("PROGRAMMING ERROR (%s,%d): DON'T CALL %s", __FILE__, __LINE__, __FUNCTION__); return v; |