Re: Thread-unsafe coding in ecpg
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Michael Meskes <meskes@postgresql.org>
Cc: pgsql-hackers@lists.postgresql.org
Date: 2019-01-20T00:10:59Z
Lists: pgsql-hackers
Michael Meskes <meskes@postgresql.org> writes: >> IOW, not only is setlocale() not necessarily thread-safe itself, >> but using it to change locales in a multithread program is seriously >> unsafe because of concurrent effects on other threads. > Agreed. > How about attached patch? According to my manpages it should only > affect the calling threat. I only tested it on my own system so far. > Could you please have a look and/or test on other systems? Yeah, I was wondering about uselocale() myself. We cannot assume it's available everywhere, but it should fix the problem where available. On machines that don't have it, we could either (a) have ecpg do nothing, and just hope you're not using a dangerous locale; or (b) consider the platform not thread-safe, forcing people to specify --disable-thread-safety to build. While (b) has more theoretical purity, I'm inclined to think it doesn't really improve anybody's life compared to (a), because --disable-thread-safety doesn't actually stop anyone from using libpq or ecpglib in threaded environments. It just makes it more likely to fail when they do. The OpenBSD 6.4 platform where I found this problem has uselocale (but the man page notes they only added it as of 6.2). I can test out the patch there, but I think the interesting questions are all about what to do on platforms without the function. regards, tom lane
Commits
-
Remove _configthreadlocale() calls in ecpg test suite.
- e3565fd61cee 12.0 landed
-
Remove infinite-loop hazards in ecpg test suite.
- d5a1fde39726 12.0 landed
- fbf5395cb1ea 9.5.16 landed
- 6d6333745b11 9.4.21 landed
- adc2553b7069 9.6.12 landed
- 5b5cb3b0eb31 10.7 landed
- 28868f77b6cb 11.2 landed
-
Blind attempt to fix _configthreadlocale() failures on MinGW.
- 773f594408b9 9.4.21 landed
- 7ac0e71aa623 9.5.16 landed
- 1d334ab6e0b5 9.6.12 landed
- dd815a94ccf5 10.7 landed
- b620cf2d4762 11.2 landed
- 2cf91ccb73ce 12.0 landed
-
Avoid thread-safety problem in ecpglib.
- f305e8457d1e 11.2 landed
- eb3e90cad1e4 9.6.12 landed
- c9ff6cbfc472 9.4.21 landed
- 844d91fd6496 9.5.16 landed
- 6106f9dd71ff 10.7 landed
- 8eb4a9312c95 12.0 landed
-
Second try at fixing ecpglib thread-safety problem.
- ee27584c4a40 12.0 landed