diff --git a/src/os/unix/unix.cpp b/src/os/unix/unix.cpp index 5902486c67..c277017f6c 100644 --- a/src/os/unix/unix.cpp +++ b/src/os/unix/unix.cpp @@ -24,7 +24,6 @@ #include #include #include -#include #ifdef WITH_SDL2 #include @@ -161,8 +160,6 @@ static std::string convert_tofrom_fs(iconv_t convd, const std::string &name) return buf; } -std::mutex _iconv_convd_mutex; - /** * Convert from OpenTTD's encoding to that of the local environment * @param name pointer to a valid string that will be converted @@ -170,25 +167,17 @@ std::mutex _iconv_convd_mutex; */ std::string OTTD2FS(const std::string &name) { - static std::atomic convd{(iconv_t)(-1)}; - iconv_t local_convd = convd.load(std::memory_order_relaxed); - if (local_convd == (iconv_t)(-1)) { - { - std::unique_lock lock(_iconv_convd_mutex); - local_convd = convd.load(); // Load a second time now that the lock is acquired - if (local_convd == (iconv_t)(-1)) { - const char *env = GetLocalCode(); - local_convd = iconv_open(env, INTERNALCODE); - if (local_convd != (iconv_t)(-1)) convd.store(local_convd); - } - } - if (local_convd == (iconv_t)(-1)) { + static iconv_t convd = (iconv_t)(-1); + if (convd == (iconv_t)(-1)) { + const char *env = GetLocalCode(); + convd = iconv_open(env, INTERNALCODE); + if (convd == (iconv_t)(-1)) { DEBUG(misc, 0, "[iconv] conversion from codeset '%s' to '%s' unsupported", INTERNALCODE, env); return name; } } - return convert_tofrom_fs(local_convd, name); + return convert_tofrom_fs(convd, name); } /** @@ -198,25 +187,17 @@ std::string OTTD2FS(const std::string &name) */ std::string FS2OTTD(const std::string &name) { - static std::atomic convd{(iconv_t)(-1)}; - iconv_t local_convd = convd.load(std::memory_order_relaxed); - if (local_convd == (iconv_t)(-1)) { - { - std::unique_lock lock(_iconv_convd_mutex); - local_convd = convd.load(); // Load a second time now that the lock is acquired - if (local_convd == (iconv_t)(-1)) { - const char *env = GetLocalCode(); - local_convd = iconv_open(INTERNALCODE, env); - if (local_convd != (iconv_t)(-1)) convd.store(local_convd); - } - } - if (local_convd == (iconv_t)(-1)) { + static iconv_t convd = (iconv_t)(-1); + if (convd == (iconv_t)(-1)) { + const char *env = GetLocalCode(); + convd = iconv_open(INTERNALCODE, env); + if (convd == (iconv_t)(-1)) { DEBUG(misc, 0, "[iconv] conversion from codeset '%s' to '%s' unsupported", env, INTERNALCODE); return name; } } - return convert_tofrom_fs(local_convd, name); + return convert_tofrom_fs(convd, name); } #endif /* WITH_ICONV */