Noah Misch <n...@leadboat.com> writes: > I had expected to use pthread_once() for the newlocale() call, but there would > be no useful way to report failure and try again later. Instead, I called > newlocale() while ECPGconnect() holds connections_mutex. See log message and > comments for details. I tested "./configure ac_cv_func_uselocale=no ..." and > tested the scenario of newlocale() failing every time.
This looks solid to me. The only nit I can find to pick is that I'd have added one more comment, along the lines of diff --git a/src/interfaces/ecpg/ecpglib/connect.c b/src/interfaces/ecpg/ecpglib/connect.c index 9f958b822c..96f99ae072 100644 --- a/src/interfaces/ecpg/ecpglib/connect.c +++ b/src/interfaces/ecpg/ecpglib/connect.c @@ -508,6 +508,11 @@ ECPGconnect(int lineno, int c, const char *name, const char *user, const char *p #ifdef ENABLE_THREAD_SAFETY pthread_mutex_lock(&connections_mutex); #endif + + /* + * ... but first, make certain we have created ecpg_clocale. Rely on + * holding connections_mutex to ensure this is done by only one thread. + */ #ifdef HAVE_USELOCALE if (!ecpg_clocale) { I've marked it RFC. regards, tom lane