1
0
mirror of https://github.com/VDR4Arch/vdr.git synced 2023-10-10 13:36:52 +02:00

Fixed a possible crash when pulling the CAM while decrypting a channel with MTD (cont'd)

This commit is contained in:
Klaus Schmidinger 2017-04-26 09:18:26 +02:00
parent 1a31974789
commit a1fda4f218
3 changed files with 15 additions and 4 deletions

7
ci.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * 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" #include "ci.h"
@ -1971,7 +1971,10 @@ void cCamSlot::Process(cTPDU *TPDU)
StopDecrypting(); StopDecrypting();
DeleteAllConnections(); DeleteAllConnections();
CancelActivation(); CancelActivation();
MtdActivate(false); if (mtdHandler)
mtdHandler->UnAssignAll();
else
Assign(NULL);
break; break;
case msReset: case msReset:
dbgprotocol("Slot %d: module reset\n", slotNumber); dbgprotocol("Slot %d: module reset\n", slotNumber);

8
mtd.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * 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" #include "mtd.h"
@ -136,6 +136,12 @@ bool cMtdHandler::Devices(cVector<int> &CardIndexes)
return CardIndexes.Size() > 0; return CardIndexes.Size() > 0;
} }
void cMtdHandler::UnAssignAll(void)
{
for (int i = 0; i < camSlots.Size(); i++)
camSlots[i]->Assign(NULL);
}
// --- cMtdMapper ------------------------------------------------------------ // --- cMtdMapper ------------------------------------------------------------
#define MTD_INVALID_PID 0xFFFF #define MTD_INVALID_PID 0xFFFF

4
mtd.h
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * 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 #ifndef __MTD_H
@ -140,6 +140,8 @@ public:
///< Adds the card indexes of the devices of any active MTD CAM slots to ///< Adds the card indexes of the devices of any active MTD CAM slots to
///< the given CardIndexes. ///< the given CardIndexes.
///< Returns true if the array is not empty. ///< 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; #define MTD_DONT_CALL(v) dsyslog("PROGRAMMING ERROR (%s,%d): DON'T CALL %s", __FILE__, __LINE__, __FUNCTION__); return v;