mirror of
https://github.com/tuxbox-fork-migrations/recycled-ni-neutrino.git
synced 2025-09-09 06:38:28 +02:00
timerd: prevent events from being deleted while sending them to neutrino
in neutrino's timer list sometimes appears an entry with random values
after deleting one because thread safety is not guaranteed for timerd's
event list while sending items to neutrino, so let's lock the mutex
earlier and unlock it later
Signed-off-by: Christian Schuett <Gaucho316@hotmail.com>
Signed-off-by: Thilo Graf <dbt@novatux.de>
Origin commit data
------------------
Commit: a96fb7b7f0
Author: Gaucho316 <Gaucho316@hotmail.com>
Date: 2014-02-14 (Fri, 14 Feb 2014)
This commit is contained in:
committed by
Jacek Jendrzej
parent
88c27e6c96
commit
a21a12ebee
@@ -59,6 +59,7 @@ bool timerd_parse_command(CBasicMessage::Header &rmsg, int connfd)
|
||||
|
||||
case CTimerdMsg::CMD_GETSLEEPTIMER:
|
||||
rspGetSleeptimer.eventID = 0;
|
||||
CTimerManager::getInstance()->lockEvents();
|
||||
if (CTimerManager::getInstance()->listEvents(events))
|
||||
{
|
||||
for (pos = events.begin(); pos != events.end(); ++pos)
|
||||
@@ -71,6 +72,7 @@ bool timerd_parse_command(CBasicMessage::Header &rmsg, int connfd)
|
||||
}
|
||||
}
|
||||
}
|
||||
CTimerManager::getInstance()->unlockEvents();
|
||||
CBasicServer::send_data(connfd, &rspGetSleeptimer, sizeof(rspGetSleeptimer));
|
||||
break;
|
||||
|
||||
@@ -78,6 +80,7 @@ bool timerd_parse_command(CBasicMessage::Header &rmsg, int connfd)
|
||||
CTimerdMsg::commandGetTimer msgGetTimer;
|
||||
CTimerd::responseGetTimer resp;
|
||||
CBasicServer::receive_data(connfd,&msgGetTimer, sizeof(msgGetTimer));
|
||||
CTimerManager::getInstance()->lockEvents();
|
||||
if(CTimerManager::getInstance()->listEvents(events))
|
||||
{
|
||||
if(events[msgGetTimer.eventID])
|
||||
@@ -134,11 +137,13 @@ bool timerd_parse_command(CBasicMessage::Header &rmsg, int connfd)
|
||||
}
|
||||
}
|
||||
}
|
||||
CTimerManager::getInstance()->unlockEvents();
|
||||
CBasicServer::send_data(connfd, &resp, sizeof(CTimerd::responseGetTimer));
|
||||
break;
|
||||
|
||||
case CTimerdMsg::CMD_GETTIMERLIST:
|
||||
CTimerdMsg::generalInteger responseInteger;
|
||||
CTimerManager::getInstance()->lockEvents();
|
||||
responseInteger.number = (CTimerManager::getInstance()->listEvents(events)) ? events.size() : 0;
|
||||
|
||||
if (CBasicServer::send_data(connfd, &responseInteger, sizeof(responseInteger)) == true)
|
||||
@@ -200,6 +205,7 @@ bool timerd_parse_command(CBasicMessage::Header &rmsg, int connfd)
|
||||
CBasicServer::send_data(connfd, &lresp, sizeof(CTimerd::responseGetTimer));
|
||||
}
|
||||
}
|
||||
CTimerManager::getInstance()->unlockEvents();
|
||||
break;
|
||||
|
||||
case CTimerdMsg::CMD_RESCHEDULETIMER: // event nach vorne oder hinten schieben
|
||||
|
Reference in New Issue
Block a user