+cc kirby@ (maintainer) Stefan Hagen <sh+openbsd-po...@codevoid.de> wrote: > Abel Abraham Camarillo Ojeda wrote (2022-06-20 08:24 CEST): > > [...] > > > > I now applied the patch correctly, I can no longer reproduce the issue. > > > > upstream seems unresponsive about this, any chance of getting it on ports? > > The one that rips out all setlocale calls? No. > > Here is a better diff, which replaces the setlocale(3) calls with thread > local (and therefore thread-safe) uselocale(3) calls. > > I'm still testing this, because it is not exactly the same as the original. > > If it improves the situation on OpenBSD, I'm not opposed to commit these > patches. Please test and report back.
I don't use rawtherapee, and my understanding of the locale api is (voluntarely) scarse, but I'm not sure the patch is right. On OpenBSD there shouldn't be issue, because freelocale (AFAIU) is a no-op, but on other OSes you need to free the locale returned by newlocale or duplocale. See (but not too closely!) the example from the GNU man page for newlocale: https://man.voidlinux.org/newlocale so the patch may be OK for us, but not to fed it to upstream. > Best Regards, > Stefan > > Index: graphics/rawtherapee/Makefile > =================================================================== > RCS file: /home/cvs/ports/graphics/rawtherapee/Makefile,v > retrieving revision 1.38 > diff -u -p -u -p -r1.38 Makefile > --- graphics/rawtherapee/Makefile 28 May 2022 06:20:01 -0000 1.38 > +++ graphics/rawtherapee/Makefile 28 Jun 2022 14:49:21 -0000 > @@ -4,7 +4,7 @@ ONLY_FOR_ARCHS = amd64 > COMMENT = RAW image processing application > > DISTNAME = rawtherapee-5.8 > -REVISION = 1 > +REVISION = 2 > > CATEGORIES = graphics > > Index: graphics/rawtherapee/patches/patch-rtengine_dcraw_c > =================================================================== > RCS file: graphics/rawtherapee/patches/patch-rtengine_dcraw_c > diff -N graphics/rawtherapee/patches/patch-rtengine_dcraw_c > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ graphics/rawtherapee/patches/patch-rtengine_dcraw_c 28 Jun 2022 > 15:45:04 -0000 > @@ -0,0 +1,13 @@ > +Index: rtengine/dcraw.c > +--- rtengine/dcraw.c.orig > ++++ rtengine/dcraw.c > +@@ -9853,8 +9853,7 @@ int CLASS main (int argc, const char **argv) > + putenv ((char *) "TZ=UTC"); > + #endif > + #ifdef LOCALEDIR > +- setlocale (LC_CTYPE, ""); > +- setlocale (LC_MESSAGES, ""); > ++ uselocale (newlocale(LC_CTYPE_MASK | LC_MESSAGES, "", > duplocale(LC_GLOBAL_LOCALE))); > + bindtextdomain ("dcraw", LOCALEDIR); > + textdomain ("dcraw"); > + #endif > Index: graphics/rawtherapee/patches/patch-rtengine_procparams_cc > =================================================================== > RCS file: graphics/rawtherapee/patches/patch-rtengine_procparams_cc > diff -N graphics/rawtherapee/patches/patch-rtengine_procparams_cc > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ graphics/rawtherapee/patches/patch-rtengine_procparams_cc 28 Jun 2022 > 14:38:58 -0000 > @@ -0,0 +1,13 @@ > +Index: rtengine/procparams.cc > +--- rtengine/procparams.cc.orig > ++++ rtengine/procparams.cc > +@@ -3729,7 +3729,8 @@ int ProcParams::save(const Glib::ustring& fname, const > + > + int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) > + { > +- setlocale(LC_NUMERIC, "C"); // to set decimal point to "." > ++ // to set decimal point to "." > ++ uselocale(newlocale(LC_NUMERIC_MASK, "C", duplocale(LC_GLOBAL_LOCALE))); > + > + if (fname.empty()) { > + return 1; > Index: graphics/rawtherapee/patches/patch-rtengine_rtthumbnail_cc > =================================================================== > RCS file: graphics/rawtherapee/patches/patch-rtengine_rtthumbnail_cc > diff -N graphics/rawtherapee/patches/patch-rtengine_rtthumbnail_cc > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ graphics/rawtherapee/patches/patch-rtengine_rtthumbnail_cc 28 Jun > 2022 15:45:47 -0000 > @@ -0,0 +1,12 @@ > +Index: rtengine/rtthumbnail.cc > +--- rtengine/rtthumbnail.cc.orig > ++++ rtengine/rtthumbnail.cc > +@@ -2013,7 +2013,7 @@ bool Thumbnail::readImage (const Glib::ustring& fname) > + > + bool Thumbnail::readData (const Glib::ustring& fname) > + { > +- setlocale (LC_NUMERIC, "C"); // to set decimal point to "." > ++ uselocale (newlocale(LC_NUMERIC_MASK, "C", > duplocale(LC_GLOBAL_LOCALE))); > + Glib::KeyFile keyFile; > + > + try { > Index: graphics/rawtherapee/patches/patch-rtexif_rtexif_cc > =================================================================== > RCS file: graphics/rawtherapee/patches/patch-rtexif_rtexif_cc > diff -N graphics/rawtherapee/patches/patch-rtexif_rtexif_cc > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ graphics/rawtherapee/patches/patch-rtexif_rtexif_cc 28 Jun 2022 > 15:37:26 -0000 > @@ -0,0 +1,13 @@ > +Index: rtexif/rtexif.cc > +--- rtexif/rtexif.cc.orig > ++++ rtexif/rtexif.cc > +@@ -2788,7 +2788,8 @@ void ExifManager::parse (bool isRaw, bool skipIgnored, > + #endif > + return; > + } > +- setlocale (LC_NUMERIC, "C"); // to set decimal point in sscanf > ++ // to set decimal point in sscanf > ++ uselocale (newlocale(LC_NUMERIC_MASK, "C", > duplocale(LC_GLOBAL_LOCALE))); > + > + if (order == ByteOrder::UNKNOWN) { > + // read tiff header > Index: graphics/rawtherapee/patches/patch-rtgui_cacheimagedata_cc > =================================================================== > RCS file: graphics/rawtherapee/patches/patch-rtgui_cacheimagedata_cc > diff -N graphics/rawtherapee/patches/patch-rtgui_cacheimagedata_cc > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ graphics/rawtherapee/patches/patch-rtgui_cacheimagedata_cc 28 Jun > 2022 14:37:57 -0000 > @@ -0,0 +1,13 @@ > +Index: rtgui/cacheimagedata.cc > +--- rtgui/cacheimagedata.cc.orig > ++++ rtgui/cacheimagedata.cc > +@@ -65,7 +65,8 @@ CacheImageData::CacheImageData() : > + */ > + int CacheImageData::load (const Glib::ustring& fname) > + { > +- setlocale(LC_NUMERIC, "C"); // to set decimal point to "." > ++ // to set decimal point to "." > ++ uselocale(newlocale(LC_NUMERIC_MASK, "C", duplocale(LC_GLOBAL_LOCALE))); > + > + Glib::KeyFile keyFile; > + > Index: graphics/rawtherapee/patches/patch-rtgui_main-cli_cc > =================================================================== > RCS file: graphics/rawtherapee/patches/patch-rtgui_main-cli_cc > diff -N graphics/rawtherapee/patches/patch-rtgui_main-cli_cc > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ graphics/rawtherapee/patches/patch-rtgui_main-cli_cc 28 Jun 2022 > 14:52:43 -0000 > @@ -0,0 +1,13 @@ > +Index: rtgui/main-cli.cc > +--- rtgui/main-cli.cc.orig > ++++ rtgui/main-cli.cc > +@@ -104,8 +104,7 @@ bool dontLoadCache ( int argc, char **argv ); > + > + int main (int argc, char **argv) > + { > +- setlocale (LC_ALL, ""); > +- setlocale (LC_NUMERIC, "C"); // to set decimal point to "." > ++ uselocale(newlocale(LC_NUMERIC_MASK, "C", (locale_t)0)); > + > + Gio::init (); > + > Index: graphics/rawtherapee/patches/patch-rtgui_main_cc > =================================================================== > RCS file: graphics/rawtherapee/patches/patch-rtgui_main_cc > diff -N graphics/rawtherapee/patches/patch-rtgui_main_cc > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ graphics/rawtherapee/patches/patch-rtgui_main_cc 28 Jun 2022 14:16:15 > -0000 > @@ -0,0 +1,15 @@ > +Switch to thread safe uselocale(3) > + > +Index: rtgui/main.cc > +--- rtgui/main.cc.orig > ++++ rtgui/main.cc > +@@ -366,8 +366,7 @@ void show_gimp_plugin_info_dialog(Gtk::Window *parent) > + > + int main (int argc, char **argv) > + { > +- setlocale (LC_ALL, ""); > +- setlocale (LC_NUMERIC, "C"); // to set decimal point to "." > ++ uselocale (newlocale(LC_NUMERIC_MASK, "C", (locale_t) 0)); > + > + simpleEditor = false; > + gimpPlugin = false; > Index: graphics/rawtherapee/patches/patch-rtgui_options_cc > =================================================================== > RCS file: graphics/rawtherapee/patches/patch-rtgui_options_cc > diff -N graphics/rawtherapee/patches/patch-rtgui_options_cc > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ graphics/rawtherapee/patches/patch-rtgui_options_cc 28 Jun 2022 > 14:38:39 -0000 > @@ -0,0 +1,12 @@ > +Index: rtgui/options.cc > +--- rtgui/options.cc.orig > ++++ rtgui/options.cc > +@@ -666,7 +666,7 @@ void Options::filterOutParsedExtensions() > + > + void Options::readFromFile(Glib::ustring fname) > + { > +- setlocale(LC_NUMERIC, "C"); // to set decimal point to "." > ++ uselocale(newlocale(LC_NUMERIC_MASK, "C", duplocale(LC_GLOBAL_LOCALE))); > + > + Glib::KeyFile keyFile; > +