@@ -201,6 +201,16 @@ static int _MACHINE_ID; /* ONE-TIME */
201201static char * _ARGV0 ; /* ONE-TIME */
202202#define DB_TZNAME_DEFAULT "America/New_York"
203203
204+ static pthread_mutex_t cdb2_event_mutex = PTHREAD_MUTEX_INITIALIZER ;
205+ static cdb2_event cdb2_gbl_events ;
206+ static int cdb2_gbl_event_version ;
207+ static cdb2_event * cdb2_next_callback (cdb2_hndl_tp * , cdb2_event_type , cdb2_event * );
208+ static void * cdb2_invoke_callback (cdb2_hndl_tp * , cdb2_event * , int , ...);
209+ static int refresh_gbl_events_on_hndl (cdb2_hndl_tp * );
210+
211+ static pthread_once_t init_once = PTHREAD_ONCE_INIT ;
212+ static int log_calls = 0 ; /* ONE-TIME */
213+
204214static pthread_mutex_t cdb2_ssl_sess_lock = PTHREAD_MUTEX_INITIALIZER ;
205215
206216static cdb2_ssl_sess * cdb2_get_ssl_sessions (cdb2_hndl_tp * hndl );
@@ -215,24 +225,8 @@ static int cdb2_allow_pmux_route = CDB2_ALLOW_PMUX_ROUTE_DEFAULT;
215225
216226static int iam_identity = 0 ;
217227
218- pthread_mutex_t cdb2_sockpool_mutex = PTHREAD_MUTEX_INITIALIZER ;
219- #define MAX_SOCKPOOL_FDS 8
220-
221- #include <netdb.h>
222-
223- static pthread_once_t init_once = PTHREAD_ONCE_INIT ;
224- static int log_calls = 0 ; /* ONE-TIME */
225-
226228static void reset_sockpool (void );
227229
228- static pthread_mutex_t cdb2_event_mutex = PTHREAD_MUTEX_INITIALIZER ;
229- static cdb2_event cdb2_gbl_events ;
230- static int cdb2_gbl_event_version ;
231- static cdb2_event * cdb2_next_callback (cdb2_hndl_tp * , cdb2_event_type ,
232- cdb2_event * );
233- static void * cdb2_invoke_callback (cdb2_hndl_tp * , cdb2_event * , int , ...);
234- static int refresh_gbl_events_on_hndl (cdb2_hndl_tp * );
235-
236230#define PROCESS_EVENT_CTRL_BEFORE (h , e , rc , callbackrc , ovwrrc ) \
237231 do { \
238232 if (e->ctrls & CDB2_OVERWRITE_RETURN_VALUE) { \
@@ -286,6 +280,37 @@ void cdb2_set_install_libs(void (*ptr)(void)) { cdb2_install = ptr; }
286280void cdb2_set_uninstall_libs (void (* ptr )(void )) { cdb2_uninstall = ptr ; }
287281#endif
288282
283+ pthread_mutex_t cdb2_sockpool_mutex = PTHREAD_MUTEX_INITIALIZER ;
284+ #define MAX_SOCKPOOL_FDS 8
285+
286+ #include <netdb.h>
287+
288+ static char * cdb2_type_str (int type )
289+ {
290+ switch (type ) {
291+ case CDB2_INTEGER :
292+ return "CDB2_INTEGER" ;
293+ case CDB2_REAL :
294+ return "CDB2_REAL" ;
295+ case CDB2_CSTRING :
296+ return "CDB2_CSTRING" ;
297+ case CDB2_BLOB :
298+ return "CDB2_BLOB" ;
299+ case CDB2_DATETIME :
300+ return "CDB2_DATETIME" ;
301+ case CDB2_INTERVALYM :
302+ return "CDB2_INTERVALYM" ;
303+ case CDB2_INTERVALDS :
304+ return "CDB2_INTERVALDS" ;
305+ case CDB2_DATETIMEUS :
306+ return "CDB2_DATETIMEUS" ;
307+ case CDB2_INTERVALDSUS :
308+ return "CDB2_INTERVALDSUS" ;
309+ default :
310+ return "???" ;
311+ }
312+ }
313+
289314#define debugprint (fmt , args ...) \
290315 do { \
291316 if (hndl && hndl->debug_trace) \
@@ -994,14 +1019,6 @@ static int cdb2_do_tcpconnect(struct in_addr in, int port, int myport,
9941019static void cdb2_init_context_msgs (cdb2_hndl_tp * hndl );
9951020static int cdb2_free_context_msgs (cdb2_hndl_tp * hndl );
9961021
997- /* Make it equal to FSQL header. */
998- struct newsqlheader {
999- int type ;
1000- int compression ;
1001- int state ; /* query state */
1002- int length ;
1003- };
1004-
10051022static cdb2_ssl_sess cdb2_ssl_sess_cache ;
10061023
10071024static int cdb2_tcpconnecth_to (cdb2_hndl_tp * hndl , const char * host , int port ,
@@ -1038,6 +1055,14 @@ static int cdb2_tcpconnecth_to(cdb2_hndl_tp *hndl, const char *host, int port,
10381055 return rc ;
10391056}
10401057
1058+ /* Make it equal to FSQL header. */
1059+ struct newsqlheader {
1060+ int type ;
1061+ int compression ;
1062+ int state ; /* query state */
1063+ int length ;
1064+ };
1065+
10411066void cdb2_set_min_retries (int min_retries )
10421067{
10431068 if (min_retries > 0 ) {
@@ -1816,6 +1841,28 @@ static int sockpool_get_from_pool(void)
18161841 return fd ;
18171842}
18181843
1844+ static void get_host_and_port_from_fd (int fd , char * buf , size_t n , int * port )
1845+ {
1846+ int rc ;
1847+ struct sockaddr_in addr ;
1848+ socklen_t addr_size = sizeof (struct sockaddr_in );
1849+
1850+ if (!CDB2_GET_HOSTNAME_FROM_SOCKPOOL_FD )
1851+ return ;
1852+
1853+ if (fd == -1 )
1854+ return ;
1855+
1856+ rc = getpeername (fd , (struct sockaddr * )& addr , & addr_size );
1857+ if (rc == 0 ) {
1858+ if (port != NULL )
1859+ * port = addr .sin_port ;
1860+ /* Request a short host name. Set buf to empty on error. */
1861+ if (getnameinfo ((struct sockaddr * )& addr , addr_size , buf , n , NULL , 0 , NI_NOFQDN ))
1862+ buf [0 ] = '\0' ;
1863+ }
1864+ }
1865+
18191866/* The sockpool mutex must be locked at this point */
18201867static int sockpool_place_fd_in_pool (int fd )
18211868{
@@ -2289,27 +2336,6 @@ static int cdb2portmux_route(cdb2_hndl_tp *hndl, const char *remote_host,
22892336 return fd ;
22902337}
22912338
2292- static void get_host_and_port_from_fd (int fd , char * buf , size_t n , int * port )
2293- {
2294- int rc ;
2295- struct sockaddr_in addr ;
2296- socklen_t addr_size = sizeof (struct sockaddr_in );
2297-
2298- if (!CDB2_GET_HOSTNAME_FROM_SOCKPOOL_FD )
2299- return ;
2300-
2301- if (fd == -1 )
2302- return ;
2303-
2304- rc = getpeername (fd , (struct sockaddr * )& addr , & addr_size );
2305- if (rc == 0 ) {
2306- * port = addr .sin_port ;
2307- /* Request a short host name. Set buf to empty on error. */
2308- if (getnameinfo ((struct sockaddr * )& addr , addr_size , buf , n , NULL , 0 , NI_NOFQDN ))
2309- buf [0 ] = '\0' ;
2310- }
2311- }
2312-
23132339static int newsql_connect_via_fd (cdb2_hndl_tp * hndl )
23142340{
23152341 int rc = 0 ;
@@ -3639,6 +3665,17 @@ int cdb2_get_effects(cdb2_hndl_tp *hndl, cdb2_effects_tp *effects)
36393665 return rc ;
36403666}
36413667
3668+ /*
3669+ Clear ack flag so cdb2_close will not consume event
3670+ */
3671+ int cdb2_clear_ack (cdb2_hndl_tp * hndl )
3672+ {
3673+ if (hndl && hndl -> ack ) {
3674+ hndl -> ack = 0 ;
3675+ }
3676+ return 0 ;
3677+ }
3678+
36423679static void free_query_list (struct query_list * head )
36433680{
36443681 struct cdb2_query * q , * tmp ;
@@ -5259,32 +5296,6 @@ static int cdb2_run_statement_typed_int(cdb2_hndl_tp *hndl, const char *sql, int
52595296 PRINT_AND_RETURN (-1 );
52605297}
52615298
5262- static char * cdb2_type_str (int type )
5263- {
5264- switch (type ) {
5265- case CDB2_INTEGER :
5266- return "CDB2_INTEGER" ;
5267- case CDB2_REAL :
5268- return "CDB2_REAL" ;
5269- case CDB2_CSTRING :
5270- return "CDB2_CSTRING" ;
5271- case CDB2_BLOB :
5272- return "CDB2_BLOB" ;
5273- case CDB2_DATETIME :
5274- return "CDB2_DATETIME" ;
5275- case CDB2_INTERVALYM :
5276- return "CDB2_INTERVALYM" ;
5277- case CDB2_INTERVALDS :
5278- return "CDB2_INTERVALDS" ;
5279- case CDB2_DATETIMEUS :
5280- return "CDB2_DATETIMEUS" ;
5281- case CDB2_INTERVALDSUS :
5282- return "CDB2_INTERVALDSUS" ;
5283- default :
5284- return "???" ;
5285- }
5286- }
5287-
52885299int cdb2_run_statement_typed (cdb2_hndl_tp * hndl , const char * sql , int ntypes ,
52895300 int * types )
52905301{
@@ -7223,17 +7234,6 @@ int cdb2_clear_contexts(cdb2_hndl_tp *hndl)
72237234 return cdb2_free_context_msgs (hndl );
72247235}
72257236
7226- /*
7227- Clear ack flag so cdb2_close will not consume event
7228- */
7229- int cdb2_clear_ack (cdb2_hndl_tp * hndl )
7230- {
7231- if (hndl ) {
7232- hndl -> ack = 0 ;
7233- }
7234- return 0 ;
7235- }
7236-
72377237cdb2_event * cdb2_register_event (cdb2_hndl_tp * hndl , cdb2_event_type types ,
72387238 cdb2_event_ctrl ctrls , cdb2_event_callback cb ,
72397239 void * user_arg , int nargs , ...)
0 commit comments