1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

ASyncRunStep doesn't need to lock when do setTimeOfDaySpeed.

* setTimeOfDaySpeed already lock a mutex when modify the value, we don't need to lock all environment.
* add a fine grain lock for getTimeOfDay and setTimeOfDay to solve environment multithread modifications on this value
This commit is contained in:
Loic Blot 2015-03-04 11:46:31 +01:00
parent 1b2f64473e
commit 7f8f9785d7
3 changed files with 40 additions and 35 deletions

View file

@ -203,24 +203,42 @@ u32 Environment::getDayNightRatio()
void Environment::setTimeOfDaySpeed(float speed)
{
JMutexAutoLock(this->m_lock);
JMutexAutoLock(this->m_timeofday_lock);
m_time_of_day_speed = speed;
}
float Environment::getTimeOfDaySpeed()
{
JMutexAutoLock(this->m_lock);
JMutexAutoLock(this->m_timeofday_lock);
float retval = m_time_of_day_speed;
return retval;
}
void Environment::setTimeOfDay(u32 time)
{
JMutexAutoLock(this->m_time_lock);
m_time_of_day = time;
m_time_of_day_f = (float)time / 24000.0;
}
u32 Environment::getTimeOfDay()
{
JMutexAutoLock(this->m_time_lock);
u32 retval = m_time_of_day;
return retval;
}
float Environment::getTimeOfDayF()
{
JMutexAutoLock(this->m_time_lock);
float retval = m_time_of_day_f;
return retval;
}
void Environment::stepTimeOfDay(float dtime)
{
float day_speed = 0;
{
JMutexAutoLock(this->m_lock);
day_speed = m_time_of_day_speed;
}
// getTimeOfDaySpeed lock the value we need to prevent MT problems
float day_speed = getTimeOfDaySpeed();
m_time_counter += dtime;
f32 speed = day_speed * 24000./(24.*3600);