This is an automated email from the ASF dual-hosted git repository.

reshke pushed a commit to branch address_1566_p2
in repository https://gitbox.apache.org/repos/asf/cloudberry.git

commit 290b98082afba1950fcf0a9fb9c971ebdc22a790
Author: Noah Misch <[email protected]>
AuthorDate: Sat Jul 2 13:00:30 2022 -0700

    ecpglib: call newlocale() once per process.
    
    ecpglib has been calling it once per SQL query and once per EXEC SQL GET
    DESCRIPTOR.  Instead, if newlocale() has not succeeded before, call it
    while establishing a connection.  This mitigates three problems:
    - If newlocale() failed in EXEC SQL GET DESCRIPTOR, the command silently
      proceeded without the intended locale change.
    - On AIX, each newlocale()+freelocale() cycle leaked memory.
    - newlocale() CPU usage may have been nontrivial.
    
    Fail the connection attempt if newlocale() fails.  Rearrange
    ecpg_do_prologue() to validate the connection before its uselocale().
    
    The sort of program that may regress is one running in an environment
    where newlocale() fails.  If that program establishes connections
    without running SQL statements, it will stop working in response to this
    change.  I'm betting against the importance of such an ECPG use case.
    Most SQL execution (any using ECPGdo()) has long required newlocale()
    success, so there's little a connection could do without newlocale().
    
    Back-patch to v10 (all supported versions).
    
    Reviewed by Tom Lane.  Reported by Guillaume Lelarge.
    
    Discussion: https://postgr.es/m/[email protected]
---
 src/interfaces/ecpg/ecpglib/connect.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/interfaces/ecpg/ecpglib/connect.c 
b/src/interfaces/ecpg/ecpglib/connect.c
index f4d2da9173a..8fb7b260868 100644
--- a/src/interfaces/ecpg/ecpglib/connect.c
+++ b/src/interfaces/ecpg/ecpglib/connect.c
@@ -15,6 +15,10 @@
 locale_t       ecpg_clocale = (locale_t) 0;
 #endif
 
+#ifdef HAVE_USELOCALE
+locale_t       ecpg_clocale;
+#endif
+
 #ifdef ENABLE_THREAD_SAFETY
 static pthread_mutex_t connections_mutex = PTHREAD_MUTEX_INITIALIZER;
 static pthread_key_t actual_connection_key;


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to