summaryrefslogtreecommitdiff
path: root/src/environment.cpp
diff options
context:
space:
mode:
authorLoic Blot <loic.blot@unix-experience.fr>2015-03-04 11:46:31 +0100
committerLoic Blot <loic.blot@unix-experience.fr>2015-03-04 11:46:31 +0100
commit7f8f9785d7e9e120a6708d2f51e32dfef3e50c19 (patch)
tree454240229e803e8ca87a75e889fd54d3110ad426 /src/environment.cpp
parent1b2f64473ed4f222d3b7f02df853730d4382105e (diff)
downloadminetest-7f8f9785d7e9e120a6708d2f51e32dfef3e50c19.tar.gz
minetest-7f8f9785d7e9e120a6708d2f51e32dfef3e50c19.tar.bz2
minetest-7f8f9785d7e9e120a6708d2f51e32dfef3e50c19.zip
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
Diffstat (limited to 'src/environment.cpp')
-rw-r--r--src/environment.cpp32
1 files changed, 25 insertions, 7 deletions
diff --git a/src/environment.cpp b/src/environment.cpp
index bafc91c00..217d50fd5 100644
--- a/src/environment.cpp
+++ b/src/environment.cpp
@@ -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);