Fixed a possible crash in case the SVDRP connection to a peer VDR is terminated while getting remote timers

This commit is contained in:
Klaus Schmidinger 2017-05-31 14:06:07 +02:00
parent f97a59597f
commit bae02358a3
2 changed files with 7 additions and 3 deletions

View File

@ -9056,7 +9056,7 @@ Video Disk Recorder Revision History
- Fixed detecting the inclusion of STL header files in tools.h (thanks to Jasmin
Jessich).
2017-05-30: Version 2.3.6
2017-05-31: Version 2.3.6
- Added debug output for checking the correct sequence of locking global lists
(with help and suggestions from Jasmin Jessich). To activate this, define the
@ -9087,3 +9087,5 @@ Video Disk Recorder Revision History
- Now using a separate mutex to fix the race between SVDRP CHAN and
cDevice::HasProgramme(), because the previous fix caused a deadlock (reported by
Derek Kelly).
- Fixed a possible crash in case the SVDRP connection to a peer VDR is terminated
while getting remote timers.

View File

@ -10,7 +10,7 @@
* and interact with the Video Disk Recorder - or write a full featured
* graphical interface that sits on top of an SVDRP connection.
*
* $Id: svdrp.c 4.19 2017/05/28 13:05:23 kls Exp $
* $Id: svdrp.c 4.20 2017/05/31 14:02:17 kls Exp $
*/
#include "svdrp.h"
@ -385,7 +385,8 @@ void cSVDRPClient::Close(void)
file.Close();
socket.Close();
LOCK_TIMERS_WRITE;
Timers->DelRemoteTimers(serverName);
if (Timers)
Timers->DelRemoteTimers(serverName);
}
}
@ -463,6 +464,7 @@ bool cSVDRPClient::Process(cStringList *Response)
else if (r <= 0) {
isyslog("SVDRP < %s lost connection to remote server '%s'", ipAddress.Connection(), *serverName);
Close();
return false;
}
}
else if (!Response)