rcinput: use mutex, suggested by Seife

Origin commit data
------------------
Branch: ni/coolstream
Commit: 409b36c776
Author: Jacek Jendrzej <overx300@gmail.com>
Date: 2019-10-14 (Mon, 14 Oct 2019)


------------------
No further description and justification available within origin commit message!

------------------
This commit was generated by Migit
This commit is contained in:
Jacek Jendrzej
2019-10-14 15:45:01 +02:00
committed by vanhofen
parent 19d489e75c
commit 2613ce696c
2 changed files with 10 additions and 3 deletions

View File

@@ -475,15 +475,18 @@ int CRCInput::addTimer(uint64_t Interval, bool oneshot, bool correct_time )
_newtimer.times_out = Interval; _newtimer.times_out = Interval;
_newtimer.correct_time = correct_time; _newtimer.correct_time = correct_time;
//printf("adding timer %d (0x%" PRIx64 ", 0x%" PRIx64 ")\n", _newtimer.id, _newtimer.times_out, Interval); //printf("adding timer %d (0x%" PRIx64 ", 0x%" PRIx64 ")\n", _newtimer.id, _newtimer.times_out, Interval);
timer_mutex.lock();
std::vector<timer>::iterator e; std::vector<timer>::iterator e;
for ( e= timers.begin(); e!= timers.end(); ++e ) for ( e= timers.begin(); e!= timers.end(); ++e )
if ( e->times_out> _newtimer.times_out ) if ( e->times_out> _newtimer.times_out )
break; break;
timers.insert(e, _newtimer); timers.insert(e, _newtimer);
timer_mutex.unlock();
return _newtimer.id; return _newtimer.id;
} }
@@ -493,6 +496,7 @@ void CRCInput::killTimer(uint32_t &id)
if(id == 0) if(id == 0)
return; return;
timer_mutex.lock();
std::vector<timer>::iterator e; std::vector<timer>::iterator e;
for ( e= timers.begin(); e!= timers.end(); ++e ) for ( e= timers.begin(); e!= timers.end(); ++e )
if ( e->id == id ) if ( e->id == id )
@@ -501,12 +505,14 @@ void CRCInput::killTimer(uint32_t &id)
break; break;
} }
id = 0; id = 0;
timer_mutex.unlock();
} }
int CRCInput::checkTimers() int CRCInput::checkTimers()
{ {
int _id = 0; int _id = 0;
uint64_t timeNow = time_monotonic_us(); uint64_t timeNow = time_monotonic_us();
timer_mutex.lock();
std::vector<timer>::iterator e; std::vector<timer>::iterator e;
for ( e= timers.begin(); e!= timers.end(); ++e ) for ( e= timers.begin(); e!= timers.end(); ++e )
if ( e->times_out< timeNow+ 2000 ) if ( e->times_out< timeNow+ 2000 )
@@ -529,8 +535,7 @@ int CRCInput::checkTimers()
if ( e->times_out> _newtimer.times_out ) if ( e->times_out> _newtimer.times_out )
break; break;
if(e != timers.end()) timers.insert(e, _newtimer);
timers.insert(e, _newtimer);
} }
else else
timers.erase(e); timers.erase(e);
@@ -540,6 +545,7 @@ int CRCInput::checkTimers()
// else // else
// printf("skipped timer %d %llx %llx\n",e->id,e->times_out, timeNow ); // printf("skipped timer %d %llx %llx\n",e->id,e->times_out, timeNow );
//printf("checkTimers: return %d\n", _id); //printf("checkTimers: return %d\n", _id);
timer_mutex.unlock();
return _id; return _id;
} }

View File

@@ -162,6 +162,7 @@ class CRCInput
int fd_max; int fd_max;
__u16 rc_last_key; __u16 rc_last_key;
OpenThreads::Mutex mutex; OpenThreads::Mutex mutex;
OpenThreads::Mutex timer_mutex;
void open(bool recheck = false); void open(bool recheck = false);
bool checkpath(in_dev id); bool checkpath(in_dev id);