@@ -230,6 +230,16 @@ static int _MACHINE_ID; /* ONE-TIME */
230230static  char  * _ARGV0 ;    /* ONE-TIME */ 
231231#define  DB_TZNAME_DEFAULT  "America/New_York"
232232
233+ static  pthread_mutex_t  cdb2_event_mutex  =  PTHREAD_MUTEX_INITIALIZER ;
234+ static  cdb2_event  cdb2_gbl_events ;
235+ static  int  cdb2_gbl_event_version ;
236+ static  cdb2_event  * cdb2_next_callback (cdb2_hndl_tp  * , cdb2_event_type , cdb2_event  * );
237+ static  void  * cdb2_invoke_callback (cdb2_hndl_tp  * , cdb2_event  * , int , ...);
238+ static  int  refresh_gbl_events_on_hndl (cdb2_hndl_tp  * );
239+ 
240+ static  pthread_once_t  init_once  =  PTHREAD_ONCE_INIT ;
241+ static  int  log_calls  =  0 ; /* ONE-TIME */ 
242+ 
233243static  pthread_mutex_t  cdb2_ssl_sess_lock  =  PTHREAD_MUTEX_INITIALIZER ;
234244
235245static  cdb2_ssl_sess  * cdb2_get_ssl_sessions (cdb2_hndl_tp  * hndl );
@@ -239,24 +249,8 @@ static int cdb2_add_ssl_session(cdb2_hndl_tp *hndl);
239249
240250static  pthread_mutex_t  cdb2_cfg_lock  =  PTHREAD_MUTEX_INITIALIZER ;
241251
242- pthread_mutex_t  cdb2_sockpool_mutex  =  PTHREAD_MUTEX_INITIALIZER ;
243- #define  MAX_SOCKPOOL_FDS  8
244- 
245- #include  <netdb.h> 
246- 
247- static  pthread_once_t  init_once  =  PTHREAD_ONCE_INIT ;
248- static  int  log_calls  =  0 ; /* ONE-TIME */ 
249- 
250252static  void  reset_sockpool (void );
251253
252- static  pthread_mutex_t  cdb2_event_mutex  =  PTHREAD_MUTEX_INITIALIZER ;
253- static  cdb2_event  cdb2_gbl_events ;
254- static  int  cdb2_gbl_event_version ;
255- static  cdb2_event  * cdb2_next_callback (cdb2_hndl_tp  * , cdb2_event_type ,
256-                                       cdb2_event  * );
257- static  void  * cdb2_invoke_callback (cdb2_hndl_tp  * , cdb2_event  * , int , ...);
258- static  int  refresh_gbl_events_on_hndl (cdb2_hndl_tp  * );
259- 
260254#define  PROCESS_EVENT_CTRL_BEFORE (h , e , rc , callbackrc , ovwrrc )                \
261255    do {                                                                       \
262256        if (e->ctrls & CDB2_OVERWRITE_RETURN_VALUE) {                          \
@@ -310,6 +304,37 @@ void cdb2_set_install_libs(void (*ptr)(void)) { cdb2_install = ptr; }
310304void  cdb2_set_uninstall_libs (void  (* ptr )(void )) { cdb2_uninstall  =  ptr ; }
311305#endif 
312306
307+ pthread_mutex_t  cdb2_sockpool_mutex  =  PTHREAD_MUTEX_INITIALIZER ;
308+ #define  MAX_SOCKPOOL_FDS  8
309+ 
310+ #include  <netdb.h> 
311+ 
312+ static  char  * cdb2_type_str (int  type )
313+ {
314+     switch  (type ) {
315+     case  CDB2_INTEGER :
316+         return  "CDB2_INTEGER" ;
317+     case  CDB2_REAL :
318+         return  "CDB2_REAL" ;
319+     case  CDB2_CSTRING :
320+         return  "CDB2_CSTRING" ;
321+     case  CDB2_BLOB :
322+         return  "CDB2_BLOB" ;
323+     case  CDB2_DATETIME :
324+         return  "CDB2_DATETIME" ;
325+     case  CDB2_INTERVALYM :
326+         return  "CDB2_INTERVALYM" ;
327+     case  CDB2_INTERVALDS :
328+         return  "CDB2_INTERVALDS" ;
329+     case  CDB2_DATETIMEUS :
330+         return  "CDB2_DATETIMEUS" ;
331+     case  CDB2_INTERVALDSUS :
332+         return  "CDB2_INTERVALDSUS" ;
333+     default :
334+         return  "???" ;
335+     }
336+ }
337+ 
313338#define  debugprint (fmt , args ...)                                               \
314339    do {                                                                       \
315340        if (hndl && hndl->debug_trace)                                         \
@@ -1104,14 +1129,6 @@ static int cdb2_do_tcpconnect(struct in_addr in, int port, int myport,
11041129static  void  cdb2_init_context_msgs (cdb2_hndl_tp  * hndl );
11051130static  int  cdb2_free_context_msgs (cdb2_hndl_tp  * hndl );
11061131
1107- /* Make it equal to FSQL header. */ 
1108- struct  newsqlheader  {
1109-     int  type ;
1110-     int  compression ;
1111-     int  state ; /* query state */ 
1112-     int  length ;
1113- };
1114- 
11151132static  cdb2_ssl_sess  cdb2_ssl_sess_cache ;
11161133
11171134static  int  cdb2_tcpconnecth_to (cdb2_hndl_tp  * hndl , const  char  * host , int  port ,
@@ -1148,6 +1165,14 @@ static int cdb2_tcpconnecth_to(cdb2_hndl_tp *hndl, const char *host, int port,
11481165    return  rc ;
11491166}
11501167
1168+ /* Make it equal to FSQL header. */ 
1169+ struct  newsqlheader  {
1170+     int  type ;
1171+     int  compression ;
1172+     int  state ; /* query state */ 
1173+     int  length ;
1174+ };
1175+ 
11511176void  cdb2_set_min_retries (int  min_retries )
11521177{
11531178    if  (min_retries  >  0 ) {
@@ -2023,6 +2048,28 @@ static int sockpool_get_from_pool(void)
20232048    return  fd ;
20242049}
20252050
2051+ static  void  get_host_and_port_from_fd (int  fd , char  * buf , size_t  n , int  * port )
2052+ {
2053+     int  rc ;
2054+     struct  sockaddr_in  addr ;
2055+     socklen_t  addr_size  =  sizeof (struct  sockaddr_in );
2056+ 
2057+     if  (!get_hostname_from_sockpool_fd )
2058+         return ;
2059+ 
2060+     if  (fd  ==  -1 )
2061+         return ;
2062+ 
2063+     rc  =  getpeername (fd , (struct  sockaddr  * )& addr , & addr_size );
2064+     if  (rc  ==  0 ) {
2065+         if  (port  !=  NULL )
2066+             * port  =  addr .sin_port ;
2067+         /* Request a short host name. Set buf to empty on error. */ 
2068+         if  (getnameinfo ((struct  sockaddr  * )& addr , addr_size , buf , n , NULL , 0 , NI_NOFQDN ))
2069+             buf [0 ] =  '\0' ;
2070+     }
2071+ }
2072+ 
20262073/* The sockpool mutex must be locked at this point */ 
20272074static  int  sockpool_place_fd_in_pool (int  fd )
20282075{
@@ -2507,27 +2554,6 @@ static int cdb2portmux_route(cdb2_hndl_tp *hndl, const char *remote_host,
25072554    return  fd ;
25082555}
25092556
2510- static  void  get_host_and_port_from_fd (int  fd , char  * buf , size_t  n , int  * port )
2511- {
2512-     int  rc ;
2513-     struct  sockaddr_in  addr ;
2514-     socklen_t  addr_size  =  sizeof (struct  sockaddr_in );
2515- 
2516-     if  (!get_hostname_from_sockpool_fd )
2517-         return ;
2518- 
2519-     if  (fd  ==  -1 )
2520-         return ;
2521- 
2522-     rc  =  getpeername (fd , (struct  sockaddr  * )& addr , & addr_size );
2523-     if  (rc  ==  0 ) {
2524-         * port  =  addr .sin_port ;
2525-         /* Request a short host name. Set buf to empty on error. */ 
2526-         if  (getnameinfo ((struct  sockaddr  * )& addr , addr_size , buf , n , NULL , 0 , NI_NOFQDN ))
2527-             buf [0 ] =  '\0' ;
2528-     }
2529- }
2530- 
25312557static  int  newsql_connect_via_fd (cdb2_hndl_tp  * hndl )
25322558{
25332559    int  rc  =  0 ;
@@ -3856,6 +3882,17 @@ int cdb2_get_effects(cdb2_hndl_tp *hndl, cdb2_effects_tp *effects)
38563882    return  rc ;
38573883}
38583884
3885+ /* 
3886+   Clear ack flag so cdb2_close will not consume event 
3887+ */ 
3888+ int  cdb2_clear_ack (cdb2_hndl_tp  * hndl )
3889+ {
3890+     if  (hndl  &&  hndl -> ack ) {
3891+         hndl -> ack  =  0 ;
3892+     }
3893+     return  0 ;
3894+ }
3895+ 
38593896static  void  free_query_list (struct  query_list  * head )
38603897{
38613898    struct  cdb2_query  * q , * tmp ;
@@ -5476,32 +5513,6 @@ static int cdb2_run_statement_typed_int(cdb2_hndl_tp *hndl, const char *sql, int
54765513    PRINT_AND_RETURN (-1 );
54775514}
54785515
5479- static  char  * cdb2_type_str (int  type )
5480- {
5481-     switch  (type ) {
5482-     case  CDB2_INTEGER :
5483-         return  "CDB2_INTEGER" ;
5484-     case  CDB2_REAL :
5485-         return  "CDB2_REAL" ;
5486-     case  CDB2_CSTRING :
5487-         return  "CDB2_CSTRING" ;
5488-     case  CDB2_BLOB :
5489-         return  "CDB2_BLOB" ;
5490-     case  CDB2_DATETIME :
5491-         return  "CDB2_DATETIME" ;
5492-     case  CDB2_INTERVALYM :
5493-         return  "CDB2_INTERVALYM" ;
5494-     case  CDB2_INTERVALDS :
5495-         return  "CDB2_INTERVALDS" ;
5496-     case  CDB2_DATETIMEUS :
5497-         return  "CDB2_DATETIMEUS" ;
5498-     case  CDB2_INTERVALDSUS :
5499-         return  "CDB2_INTERVALDSUS" ;
5500-     default :
5501-         return  "???" ;
5502-     }
5503- }
5504- 
55055516int  cdb2_run_statement_typed (cdb2_hndl_tp  * hndl , const  char  * sql , int  ntypes ,
55065517                             int  * types )
55075518{
@@ -7478,17 +7489,6 @@ int cdb2_clear_contexts(cdb2_hndl_tp *hndl)
74787489    return  cdb2_free_context_msgs (hndl );
74797490}
74807491
7481- /* 
7482-   Clear ack flag so cdb2_close will not consume event 
7483- */ 
7484- int  cdb2_clear_ack (cdb2_hndl_tp *  hndl )
7485- {
7486-     if  (hndl ) {
7487-         hndl -> ack  =  0 ;
7488-     }
7489-     return  0 ;
7490- }
7491- 
74927492cdb2_event  * cdb2_register_event (cdb2_hndl_tp  * hndl , cdb2_event_type  types ,
74937493                                cdb2_event_ctrl  ctrls , cdb2_event_callback  cb ,
74947494                                void  * user_arg , int  nargs , ...)
0 commit comments