diff --git a/libraries/AP_RTC/AP_RTC.cpp b/libraries/AP_RTC/AP_RTC.cpp index c3e978d3fb..781e1602fb 100644 --- a/libraries/AP_RTC/AP_RTC.cpp +++ b/libraries/AP_RTC/AP_RTC.cpp @@ -63,6 +63,7 @@ void AP_RTC::set_utc_usec(uint64_t time_utc_usec, source_type type) // can't allow time to go backwards, ever return; } + WITH_SEMAPHORE(rsem); rtc_shift = tmp; diff --git a/libraries/AP_RTC/AP_RTC.h b/libraries/AP_RTC/AP_RTC.h index 373cc6b62d..d0c9f79a37 100644 --- a/libraries/AP_RTC/AP_RTC.h +++ b/libraries/AP_RTC/AP_RTC.h @@ -49,9 +49,15 @@ public: return _singleton; } + // allow threads to lock against RTC update + HAL_Semaphore &get_semaphore(void) { + return rsem; + } + private: static AP_RTC *_singleton; + HAL_Semaphore_Recursive rsem; source_type rtc_source_type = SOURCE_NONE; int64_t rtc_shift;