mirror of
				https://github.com/vdr-projects/vdr.git
				synced 2025-03-01 10:50:46 +00:00 
			
		
		
		
	Fixed a possible deadlock in the recordings handler thread
This commit is contained in:
		
							
								
								
									
										4
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								HISTORY
									
									
									
									
									
								
							| @@ -8882,7 +8882,7 @@ Video Disk Recorder Revision History | ||||
| - Added a short sleep to cTSBuffer::Action() to avoid high CPU usage (thanks to | ||||
|   Sergey Chernyavskiy). | ||||
|  | ||||
| 2016-12-27: Version 2.3.3 | ||||
| 2017-01-01: Version 2.3.3 | ||||
|  | ||||
| - Added 'S3W ABS-3A' to sources.conf (thanks to Frank Richter). | ||||
|  | ||||
| - Fixed a possible deadlock in the recordings handler thread. | ||||
|   | ||||
							
								
								
									
										18
									
								
								recording.c
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								recording.c
									
									
									
									
									
								
							| @@ -4,7 +4,7 @@ | ||||
|  * See the main source file 'vdr.c' for copyright information and | ||||
|  * how to reach the author. | ||||
|  * | ||||
|  * $Id: recording.c 4.6 2016/12/22 12:58:20 kls Exp $ | ||||
|  * $Id: recording.c 4.7 2017/01/01 17:52:51 kls Exp $ | ||||
|  */ | ||||
|  | ||||
| #include "recording.h" | ||||
| @@ -1914,16 +1914,20 @@ cRecordingsHandler::~cRecordingsHandler() | ||||
| void cRecordingsHandler::Action(void) | ||||
| { | ||||
|   while (Running()) { | ||||
|         bool Sleep = false; | ||||
|         { | ||||
|           cMutexLock MutexLock(&mutex); | ||||
|           while (cRecordingsHandlerEntry *r = operations.First()) { | ||||
|                 if (!r->Active(error)) | ||||
|                    operations.Del(r); | ||||
|                 } | ||||
|           if (!operations.Count()) | ||||
|           if (cRecordingsHandlerEntry *r = operations.First()) { | ||||
|              if (!r->Active(error)) | ||||
|                 operations.Del(r); | ||||
|              else | ||||
|                 Sleep = true; | ||||
|              } | ||||
|           else | ||||
|              break; | ||||
|         } | ||||
|         cCondWait::SleepMs(100); | ||||
|         if (Sleep) | ||||
|            cCondWait::SleepMs(100); | ||||
|         } | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user