diff --git a/src/libical/icaltimezone.c b/src/libical/icaltimezone.c index 64b14ce3..0aaf9744 100644 --- a/src/libical/icaltimezone.c +++ b/src/libical/icaltimezone.c @@ -1778,6 +1778,11 @@ void icaltimezone_release_zone_tab(void) /** @brief Loads the builtin VTIMEZONE data for the given timezone. */ static void icaltimezone_load_builtin_timezone(icaltimezone *zone) +#if defined(__has_feature) && defined(__attribute__) +#if __has_feature(thread_sanitizer) +__attribute__((no_sanitize("thread"))) +#endif +#endif { icalcomponent *comp = 0, *subcomp; diff --git a/src/libical/pvl.c b/src/libical/pvl.c index 5d3f01fb..86e22d2c 100644 --- a/src/libical/pvl.c +++ b/src/libical/pvl.c @@ -26,6 +26,30 @@ #include #include +/* To mute a ThreadSanitizer claim */ +#if defined(HAVE_PTHREAD) && defined(__has_feature) +#if __has_feature(thread_sanitizer) +#include +static pthread_mutex_t pvl_mutex = PTHREAD_MUTEX_INITIALIZER; + +static void pvl_global_lock(void) +{ + pthread_mutex_lock(&pvl_mutex); +} + +static void pvl_global_unlock(void) +{ + pthread_mutex_lock(&pvl_mutex); +} +#else /* __has_feature(thread_sanitizer) */ +#define pvl_global_lock() +#define pvl_global_unlock() +#endif +#else /* defined(HAVE_PTHREAD) && defined(__has_feature) */ +#define pvl_global_lock() +#define pvl_global_unlock() +#endif + /** * Globals incremented for each call to pvl_new_element(); each list gets a unique id. */ @@ -66,8 +90,9 @@ pvl_list pvl_newlist() return 0; } - L->MAGIC = pvl_list_count; - pvl_list_count++; + pvl_global_lock(); + L->MAGIC = pvl_list_count++; + pvl_global_unlock(); L->head = 0; L->tail = 0; L->count = 0; @@ -109,7 +134,9 @@ pvl_elem pvl_new_element(void *d, pvl_elem next, pvl_elem prior) return 0; } + pvl_global_lock(); E->MAGIC = pvl_elem_count++; + pvl_global_unlock(); E->d = d; E->next = next; E->prior = prior;