RE: Thread-unsafe coding in ecpg
Tsunakawa, Takayuki <tsunakawa.takay@jp.fujitsu.com>
From: "Tsunakawa, Takayuki" <tsunakawa.takay@jp.fujitsu.com>
To: 'Tom Lane' <tgl@sss.pgh.pa.us>
Cc: Michael Meskes <meskes@postgresql.org>, "pgsql-hackers@lists.postgresql.org" <pgsql-hackers@lists.postgresql.org>
Date: 2019-01-22T06:57:22Z
Lists: pgsql-hackers
From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
> BTW, I found another spot in descriptor.c where ecpglib is using
> setlocale() for the same purpose. Perhaps that one's not reachable
> in threaded apps, but I didn't see any obvious reason to think so,
> so I changed it too.
Ouch, thanks. And I'm sorry to annoy you by pointing out a trivial thing: in v3 patch, _configthreadlocale() is not called to restore the original value when setlocale() or ecpg_strdup() fails. I hope this is fixed in v4.
+ #ifdef WIN32
+ stmt->oldthreadlocale = _configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
+ if (stmt->oldthreadlocale == -1)
+ {
+ ecpg_do_epilogue(stmt);
+ return false;
+ }
+ #endif
stmt->oldlocale = ecpg_strdup(setlocale(LC_NUMERIC, NULL), lineno);
if (stmt->oldlocale == NULL)
{
Regards
Takayuki Tsunakawa
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