This patch is an "easy win" partial fix for BZ #16145, which notes
the heavy contention on tzset_lock when multiple threads are converting
times with localtime_r().
In __tz_convert(), the lock does not need to be held after
__tzfile_compute() / __tz_compute() have been called, so we can move the
unlock up. At this point there is still significant work to be done in
__offtime(), so we see some improvement (in my testing with 8 cores
banging on localtime_r(), ~20% improvement in throughput).
+2015-02-24 Kevin Easton <kevin@guarana.org>
+
+ [BZ #16145] (partial fix)
+ * time/tzset.c (__tz_convert): Unlock tzset_lock earlier
+ to reduce lock contention.
+
2015-02-24 Miroslav Lichvar <mlichvar@redhat.com>
* sysdeps/unix/sysv/linux/bits/timex.h: Update version.
leap_extra_secs = 0;
}
+ __libc_lock_unlock (tzset_lock);
+
if (tp)
{
if (! use_localtime)
tp = NULL;
}
- __libc_lock_unlock (tzset_lock);
-
return tp;
}