+/* Set up the mutexes for this file. There are no races possible on
+ * non-threaded perls, nor platforms that naturally don't have them.
+ * Otherwise, we need to have mutexes. If we have reentrant versions of the
+ * functions below, they automatically will be substituted for the
+ * non-reentrant ones. That solves the problem of the buffers being trashed by
+ * another thread, but not of the environment or locale changing during their
+ * execution. To do that, we only need a read lock (which prevents writing by
+ * others). However, if we don't have re-entrant functions, we can gain some
+ * measure of thread-safety by using an exclusive lock during their execution.
+ * That will protect against any other use of the functions that use the
+ * mutexes, which all of core should be using. */
+#ifdef USE_REENTRANT_API /* This indicates a platform where we need reentrant
+ versions if have them */
+# ifdef PERL_REENTR_USING_LOCALTIME_R
+# define LOCALTIME_LOCK ENV_LOCALE_READ_LOCK
+# define LOCALTIME_UNLOCK ENV_LOCALE_READ_UNLOCK
+# else
+# define LOCALTIME_LOCK ENV_LOCALE_LOCK
+# define LOCALTIME_UNLOCK ENV_LOCALE_UNLOCK
+# endif
+# ifdef PERL_REENTR_USING_GMTIME_R
+# define GMTIME_LOCK ENV_LOCALE_READ_LOCK
+# define GMTIME_UNLOCK ENV_LOCALE_READ_UNLOCK
+# else
+# define GMTIME_LOCK ENV_LOCALE_LOCK
+# define GMTIME_UNLOCK ENV_LOCALE_UNLOCK
+# endif
+#else /* Reentrant not needed, so races not possible */
+# define LOCALTIME_LOCK NOOP
+# define LOCALTIME_UNLOCK NOOP
+# define GMTIME_LOCK NOOP
+# define GMTIME_UNLOCK NOOP
+#endif
+