@@ -234,6 +234,16 @@ static int _MACHINE_ID; /* ONE-TIME */
234234static char * _ARGV0 ; /* ONE-TIME */
235235#define DB_TZNAME_DEFAULT "America/New_York"
236236
237+ static pthread_mutex_t cdb2_event_mutex = PTHREAD_MUTEX_INITIALIZER ;
238+ static cdb2_event cdb2_gbl_events ;
239+ static int cdb2_gbl_event_version ;
240+ static cdb2_event * cdb2_next_callback (cdb2_hndl_tp * , cdb2_event_type , cdb2_event * );
241+ static void * cdb2_invoke_callback (cdb2_hndl_tp * , cdb2_event * , int , ...);
242+ static int refresh_gbl_events_on_hndl (cdb2_hndl_tp * );
243+
244+ static pthread_once_t init_once = PTHREAD_ONCE_INIT ;
245+ static int log_calls = 0 ; /* ONE-TIME */
246+
237247static pthread_mutex_t cdb2_ssl_sess_lock = PTHREAD_MUTEX_INITIALIZER ;
238248
239249static cdb2_ssl_sess * cdb2_get_ssl_sessions (cdb2_hndl_tp * hndl );
@@ -243,24 +253,8 @@ static int cdb2_add_ssl_session(cdb2_hndl_tp *hndl);
243253
244254static pthread_mutex_t cdb2_cfg_lock = PTHREAD_MUTEX_INITIALIZER ;
245255
246- pthread_mutex_t cdb2_sockpool_mutex = PTHREAD_MUTEX_INITIALIZER ;
247- #define MAX_SOCKPOOL_FDS 8
248-
249- #include <netdb.h>
250-
251- static pthread_once_t init_once = PTHREAD_ONCE_INIT ;
252- static int log_calls = 0 ; /* ONE-TIME */
253-
254256static void reset_sockpool (void );
255257
256- static pthread_mutex_t cdb2_event_mutex = PTHREAD_MUTEX_INITIALIZER ;
257- static cdb2_event cdb2_gbl_events ;
258- static int cdb2_gbl_event_version ;
259- static cdb2_event * cdb2_next_callback (cdb2_hndl_tp * , cdb2_event_type ,
260- cdb2_event * );
261- static void * cdb2_invoke_callback (cdb2_hndl_tp * , cdb2_event * , int , ...);
262- static int refresh_gbl_events_on_hndl (cdb2_hndl_tp * );
263-
264258#define PROCESS_EVENT_CTRL_BEFORE (h , e , rc , callbackrc , ovwrrc ) \
265259 do { \
266260 if (e->ctrls & CDB2_OVERWRITE_RETURN_VALUE) { \
@@ -314,6 +308,37 @@ void cdb2_set_install_libs(void (*ptr)(void)) { cdb2_install = ptr; }
314308void cdb2_set_uninstall_libs (void (* ptr )(void )) { cdb2_uninstall = ptr ; }
315309#endif
316310
311+ pthread_mutex_t cdb2_sockpool_mutex = PTHREAD_MUTEX_INITIALIZER ;
312+ #define MAX_SOCKPOOL_FDS 8
313+
314+ #include <netdb.h>
315+
316+ static char * cdb2_type_str (int type )
317+ {
318+ switch (type ) {
319+ case CDB2_INTEGER :
320+ return "CDB2_INTEGER" ;
321+ case CDB2_REAL :
322+ return "CDB2_REAL" ;
323+ case CDB2_CSTRING :
324+ return "CDB2_CSTRING" ;
325+ case CDB2_BLOB :
326+ return "CDB2_BLOB" ;
327+ case CDB2_DATETIME :
328+ return "CDB2_DATETIME" ;
329+ case CDB2_INTERVALYM :
330+ return "CDB2_INTERVALYM" ;
331+ case CDB2_INTERVALDS :
332+ return "CDB2_INTERVALDS" ;
333+ case CDB2_DATETIMEUS :
334+ return "CDB2_DATETIMEUS" ;
335+ case CDB2_INTERVALDSUS :
336+ return "CDB2_INTERVALDSUS" ;
337+ default :
338+ return "???" ;
339+ }
340+ }
341+
317342#define debugprint (fmt , args ...) \
318343 do { \
319344 if (hndl && hndl->debug_trace) \
@@ -1108,14 +1133,6 @@ static int cdb2_do_tcpconnect(struct in_addr in, int port, int myport,
11081133static void cdb2_init_context_msgs (cdb2_hndl_tp * hndl );
11091134static int cdb2_free_context_msgs (cdb2_hndl_tp * hndl );
11101135
1111- /* Make it equal to FSQL header. */
1112- struct newsqlheader {
1113- int type ;
1114- int compression ;
1115- int state ; /* query state */
1116- int length ;
1117- };
1118-
11191136static cdb2_ssl_sess cdb2_ssl_sess_cache ;
11201137
11211138static int cdb2_tcpconnecth_to (cdb2_hndl_tp * hndl , const char * host , int port ,
@@ -1152,6 +1169,14 @@ static int cdb2_tcpconnecth_to(cdb2_hndl_tp *hndl, const char *host, int port,
11521169 return rc ;
11531170}
11541171
1172+ /* Make it equal to FSQL header. */
1173+ struct newsqlheader {
1174+ int type ;
1175+ int compression ;
1176+ int state ; /* query state */
1177+ int length ;
1178+ };
1179+
11551180void cdb2_set_min_retries (int min_retries )
11561181{
11571182 if (min_retries > 0 ) {
@@ -2027,6 +2052,28 @@ static int sockpool_get_from_pool(void)
20272052 return fd ;
20282053}
20292054
2055+ static void get_host_and_port_from_fd (int fd , char * buf , size_t n , int * port )
2056+ {
2057+ int rc ;
2058+ struct sockaddr_in addr ;
2059+ socklen_t addr_size = sizeof (struct sockaddr_in );
2060+
2061+ if (!get_hostname_from_sockpool_fd )
2062+ return ;
2063+
2064+ if (fd == -1 )
2065+ return ;
2066+
2067+ rc = getpeername (fd , (struct sockaddr * )& addr , & addr_size );
2068+ if (rc == 0 ) {
2069+ if (port != NULL )
2070+ * port = addr .sin_port ;
2071+ /* Request a short host name. Set buf to empty on error. */
2072+ if (getnameinfo ((struct sockaddr * )& addr , addr_size , buf , n , NULL , 0 , NI_NOFQDN ))
2073+ buf [0 ] = '\0' ;
2074+ }
2075+ }
2076+
20302077/* The sockpool mutex must be locked at this point */
20312078static int sockpool_place_fd_in_pool (int fd )
20322079{
@@ -2511,27 +2558,6 @@ static int cdb2portmux_route(cdb2_hndl_tp *hndl, const char *remote_host,
25112558 return fd ;
25122559}
25132560
2514- static void get_host_and_port_from_fd (int fd , char * buf , size_t n , int * port )
2515- {
2516- int rc ;
2517- struct sockaddr_in addr ;
2518- socklen_t addr_size = sizeof (struct sockaddr_in );
2519-
2520- if (!get_hostname_from_sockpool_fd )
2521- return ;
2522-
2523- if (fd == -1 )
2524- return ;
2525-
2526- rc = getpeername (fd , (struct sockaddr * )& addr , & addr_size );
2527- if (rc == 0 ) {
2528- * port = addr .sin_port ;
2529- /* Request a short host name. Set buf to empty on error. */
2530- if (getnameinfo ((struct sockaddr * )& addr , addr_size , buf , n , NULL , 0 , NI_NOFQDN ))
2531- buf [0 ] = '\0' ;
2532- }
2533- }
2534-
25352561static int newsql_connect_via_fd (cdb2_hndl_tp * hndl )
25362562{
25372563 int rc = 0 ;
@@ -3860,6 +3886,17 @@ int cdb2_get_effects(cdb2_hndl_tp *hndl, cdb2_effects_tp *effects)
38603886 return rc ;
38613887}
38623888
3889+ /*
3890+ Clear ack flag so cdb2_close will not consume event
3891+ */
3892+ int cdb2_clear_ack (cdb2_hndl_tp * hndl )
3893+ {
3894+ if (hndl && hndl -> ack ) {
3895+ hndl -> ack = 0 ;
3896+ }
3897+ return 0 ;
3898+ }
3899+
38633900static void free_query_list (struct query_list * head )
38643901{
38653902 struct cdb2_query * q , * tmp ;
@@ -5480,32 +5517,6 @@ static int cdb2_run_statement_typed_int(cdb2_hndl_tp *hndl, const char *sql, int
54805517 PRINT_AND_RETURN (-1 );
54815518}
54825519
5483- static char * cdb2_type_str (int type )
5484- {
5485- switch (type ) {
5486- case CDB2_INTEGER :
5487- return "CDB2_INTEGER" ;
5488- case CDB2_REAL :
5489- return "CDB2_REAL" ;
5490- case CDB2_CSTRING :
5491- return "CDB2_CSTRING" ;
5492- case CDB2_BLOB :
5493- return "CDB2_BLOB" ;
5494- case CDB2_DATETIME :
5495- return "CDB2_DATETIME" ;
5496- case CDB2_INTERVALYM :
5497- return "CDB2_INTERVALYM" ;
5498- case CDB2_INTERVALDS :
5499- return "CDB2_INTERVALDS" ;
5500- case CDB2_DATETIMEUS :
5501- return "CDB2_DATETIMEUS" ;
5502- case CDB2_INTERVALDSUS :
5503- return "CDB2_INTERVALDSUS" ;
5504- default :
5505- return "???" ;
5506- }
5507- }
5508-
55095520int cdb2_run_statement_typed (cdb2_hndl_tp * hndl , const char * sql , int ntypes ,
55105521 int * types )
55115522{
@@ -7482,17 +7493,6 @@ int cdb2_clear_contexts(cdb2_hndl_tp *hndl)
74827493 return cdb2_free_context_msgs (hndl );
74837494}
74847495
7485- /*
7486- Clear ack flag so cdb2_close will not consume event
7487- */
7488- int cdb2_clear_ack (cdb2_hndl_tp * hndl )
7489- {
7490- if (hndl ) {
7491- hndl -> ack = 0 ;
7492- }
7493- return 0 ;
7494- }
7495-
74967496cdb2_event * cdb2_register_event (cdb2_hndl_tp * hndl , cdb2_event_type types ,
74977497 cdb2_event_ctrl ctrls , cdb2_event_callback cb ,
74987498 void * user_arg , int nargs , ...)
0 commit comments