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:37:29Z
Lists: pgsql-hackers
Michael Meskes <meskes@postgresql.org> writes: >> 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 question is, what do we do on those platforms? Use setlocale() or > fallback to (a) and document that ecpg has to run in a C locale? No, we shouldn't use setlocale(), because it clearly is hazardous even on platforms where it doesn't fail outright. I don't see anything so wrong with just documenting the hazard. The situation isn't noticeably more dangerous than simple use of the C library; sscanf, strtod, etc are all likely to do surprising things when LC_NUMERIC isn't C. > We could also rewrite the parsing of numbers to not be locale > dependent. Perhaps, but that seems like a giant undertaking. I'm not excited about duplicating strtod(), for instance. 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