From: Christopher Powers Date: January 24 2011 10:01pm Subject: bzr push into mysql-trunk-wl4896 branch (chris.powers:3217 to 3218) WL#4896 List-Archive: http://lists.mysql.com/commits/129492 Message-Id: <20110124220137.2A0541DB0323@xeno.mysql.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1253896534216259785==" --===============1253896534216259785== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline 3218 Christopher Powers 2011-01-24 WL#4896 Performance Schema Net IO Winsock support @ include/mysql/psi/mysql_socket.h Disabled socket APIs not supported by Winsock @ storage/perfschema/pfs.cc - Disabled socket APIs not supported by Winsock - Implemented Win32 versions of inet_ntop() and inet_pton() for converting IP from internal format to string @ storage/perfschema/pfs_instr.h Winsock support modified: include/mysql/psi/mysql_socket.h* storage/perfschema/pfs.cc storage/perfschema/pfs_instr.h 3217 Christopher Powers 2011-01-14 [merge] merge w/ mysql-trunk removed: include/my_no_pthread.h mysys/mf_brkhant.c added: mysql-test/extra/rpl_tests/rpl_show_binlog_events.inc mysql-test/extra/rpl_tests/rpl_show_log_events_with_varying_options.inc mysql-test/include/plugin.defs mysql-test/r/filesort_debug.result mysql-test/suite/sys_vars/r/autocommit_func4.result mysql-test/suite/sys_vars/r/autocommit_func5.result mysql-test/suite/sys_vars/t/autocommit_func4-master.opt mysql-test/suite/sys_vars/t/autocommit_func4.test mysql-test/suite/sys_vars/t/autocommit_func5-master.opt mysql-test/suite/sys_vars/t/autocommit_func5.test mysql-test/t/filesort_debug.test unittest/gunit/my_decimal-t.cc modified: client/mysqladmin.cc client/mysqldump.c client/mysqlslap.c client/mysqltest.cc cmd-line-utils/readline/CMakeLists.txt config.h.cmake dbug/dbug.c dbug/dbug_analyze.c dbug/my_main.c dbug/tests.c include/CMakeLists.txt include/heap.h include/my_base.h include/my_bitmap.h include/my_global.h include/my_pthread.h include/my_sys.h include/myisam.h include/thr_alarm.h libmysql/client_settings.h libmysql/libmysql.c mysql-test/collections/README.experimental mysql-test/collections/default.experimental mysql-test/collections/mysql-trunk.weekly mysql-test/extra/rpl_tests/rpl_show_relaylog_events.inc mysql-test/include/func_in.inc mysql-test/include/icp_tests.inc mysql-test/include/select.inc mysql-test/include/setup_fake_relay_log.inc mysql-test/include/subquery.inc mysql-test/include/wait_for_status_var.inc mysql-test/lib/mtr_cases.pm mysql-test/lib/mtr_report.pm mysql-test/mysql-test-run.pl mysql-test/r/auto_increment.result mysql-test/r/client_xml.result mysql-test/r/func_in_icp.result mysql-test/r/func_in_icp_mrr.result mysql-test/r/func_in_mrr.result mysql-test/r/func_in_mrr_cost.result mysql-test/r/func_in_none.result mysql-test/r/func_math.result mysql-test/r/func_str.result mysql-test/r/gis.result mysql-test/r/innodb_icp.result mysql-test/r/innodb_icp_all.result mysql-test/r/innodb_icp_none.result mysql-test/r/innodb_mysql_sync.result mysql-test/r/join_outer.result mysql-test/r/myisam_icp.result mysql-test/r/myisam_icp_all.result mysql-test/r/myisam_icp_none.result mysql-test/r/myisam_mrr_all.result mysql-test/r/myisam_mrr_cost_all.result mysql-test/r/mysqlbinlog_row_big.result mysql-test/r/mysqld--help-notwin.result mysql-test/r/mysqld--help-win.result mysql-test/r/mysqldump.result mysql-test/r/mysqltest.result mysql-test/r/not_embedded_server.result mysql-test/r/order_by_all.result mysql-test/r/partition.result mysql-test/r/partition_error.result mysql-test/r/partition_range.result mysql-test/r/select_all.result mysql-test/r/select_all_jcl6.result mysql-test/r/select_icp_mrr.result mysql-test/r/select_icp_mrr_jcl6.result mysql-test/r/select_none.result mysql-test/r/select_none_jcl6.result mysql-test/r/show_check.result mysql-test/r/subquery_all.result mysql-test/r/subquery_nomat_nosj.result mysql-test/r/subquery_none.result mysql-test/r/subquery_sj_none.result mysql-test/r/type_timestamp.result mysql-test/r/udf.result mysql-test/r/union.result mysql-test/r/update.result mysql-test/r/view_grant.result mysql-test/suite/bugs/t/bug57108.test mysql-test/suite/engines/funcs/r/db_alter_character_set.result mysql-test/suite/engines/funcs/r/db_alter_collate_ascii.result mysql-test/suite/engines/funcs/r/db_alter_collate_utf8.result mysql-test/suite/engines/funcs/r/in_multicolumn_string_pk_constraint_error.result mysql-test/suite/engines/funcs/r/in_multicolumn_string_pk_constraint_ignore.result mysql-test/suite/engines/funcs/r/in_multicolumn_string_unique_constraint_error.result mysql-test/suite/engines/funcs/r/in_string_pk_constraint_error.result mysql-test/suite/engines/funcs/r/in_string_unique_constraint_error.result mysql-test/suite/engines/funcs/r/rpl000013.result mysql-test/suite/engines/funcs/r/rpl_000015.result mysql-test/suite/engines/funcs/r/rpl_change_master.result mysql-test/suite/engines/funcs/r/rpl_drop.result mysql-test/suite/engines/funcs/r/rpl_flushlog_loop.result mysql-test/suite/engines/funcs/r/rpl_loaddata_s.result mysql-test/suite/engines/funcs/r/rpl_log_pos.result mysql-test/suite/engines/funcs/r/rpl_rbr_to_sbr.result mysql-test/suite/engines/funcs/r/rpl_row_drop.result mysql-test/suite/engines/funcs/r/rpl_row_inexist_tbl.result mysql-test/suite/engines/funcs/r/rpl_row_reset_slave.result mysql-test/suite/engines/funcs/r/rpl_row_sp005.result mysql-test/suite/engines/funcs/r/rpl_row_trig003.result mysql-test/suite/engines/funcs/r/rpl_row_until.result mysql-test/suite/engines/funcs/r/rpl_server_id1.result mysql-test/suite/engines/funcs/r/rpl_server_id2.result mysql-test/suite/engines/funcs/r/rpl_session_var.result mysql-test/suite/engines/funcs/r/rpl_slave_status.result mysql-test/suite/engines/funcs/r/rpl_stm_no_op.result mysql-test/suite/engines/funcs/r/rpl_switch_stm_row_mixed.result mysql-test/suite/engines/funcs/r/rpl_temp_table.result mysql-test/suite/engines/funcs/r/rpl_trigger.result mysql-test/suite/engines/funcs/r/se_join_left.result mysql-test/suite/engines/funcs/r/se_join_left_outer.result mysql-test/suite/engines/funcs/r/se_join_natural_left.result mysql-test/suite/engines/funcs/r/se_join_natural_left_outer.result mysql-test/suite/engines/funcs/r/sf_alter.result mysql-test/suite/engines/funcs/r/sf_cursor.result mysql-test/suite/engines/funcs/r/sp_alter.result mysql-test/suite/engines/funcs/r/sp_cursor.result mysql-test/suite/engines/funcs/r/ta_rename.result mysql-test/suite/engines/funcs/t/db_alter_collate_utf8.test mysql-test/suite/engines/funcs/t/disabled.def mysql-test/suite/engines/funcs/t/in_multicolumn_string_pk_constraint_error.test mysql-test/suite/engines/funcs/t/in_multicolumn_string_pk_constraint_ignore.test mysql-test/suite/engines/funcs/t/in_multicolumn_string_unique_constraint_error.test mysql-test/suite/engines/funcs/t/in_string_pk_constraint_error.test mysql-test/suite/engines/funcs/t/in_string_unique_constraint_error.test mysql-test/suite/engines/funcs/t/rpl000013.test mysql-test/suite/engines/funcs/t/rpl_000015.test mysql-test/suite/engines/funcs/t/rpl_change_master.test mysql-test/suite/engines/funcs/t/rpl_err_ignoredtable.test mysql-test/suite/engines/funcs/t/rpl_flushlog_loop.test mysql-test/suite/engines/funcs/t/rpl_get_lock.test mysql-test/suite/engines/funcs/t/rpl_loaddata_s.test mysql-test/suite/engines/funcs/t/rpl_loadfile.test mysql-test/suite/engines/funcs/t/rpl_log_pos.test mysql-test/suite/engines/funcs/t/rpl_misc_functions.test mysql-test/suite/engines/funcs/t/rpl_rbr_to_sbr.test mysql-test/suite/engines/funcs/t/rpl_row_drop.test mysql-test/suite/engines/funcs/t/rpl_row_inexist_tbl.test mysql-test/suite/engines/funcs/t/rpl_row_until.test mysql-test/suite/engines/funcs/t/rpl_server_id1.test mysql-test/suite/engines/funcs/t/rpl_server_id2.test mysql-test/suite/engines/funcs/t/rpl_slave_status.test mysql-test/suite/engines/funcs/t/rpl_switch_stm_row_mixed.test mysql-test/suite/engines/funcs/t/rpl_temp_table.test mysql-test/suite/engines/funcs/t/rpl_temporary.test mysql-test/suite/engines/funcs/t/rpl_trigger.test mysql-test/suite/engines/funcs/t/se_join_left.test mysql-test/suite/engines/funcs/t/se_join_left_outer.test mysql-test/suite/engines/funcs/t/se_join_natural_left.test mysql-test/suite/engines/funcs/t/se_join_natural_left_outer.test mysql-test/suite/engines/iuds/r/insert_number.result mysql-test/suite/engines/iuds/r/strings_charsets_update_delete.result mysql-test/suite/engines/iuds/r/strings_update_delete.result mysql-test/suite/engines/iuds/r/type_bit_iuds.result mysql-test/suite/engines/iuds/r/update_delete_calendar.result mysql-test/suite/engines/iuds/r/update_delete_number.result mysql-test/suite/engines/iuds/t/disabled.def mysql-test/suite/engines/iuds/t/insert_number.test mysql-test/suite/engines/iuds/t/update_delete_calendar.test mysql-test/suite/innodb/r/innodb-timeout.result mysql-test/suite/innodb/r/innodb.result mysql-test/suite/innodb/t/innodb-timeout.test mysql-test/suite/innodb/t/innodb.test mysql-test/suite/parts/inc/part_supported_sql_funcs_main.inc mysql-test/suite/parts/r/part_supported_sql_func_innodb.result mysql-test/suite/parts/r/part_supported_sql_func_myisam.result mysql-test/suite/perfschema/include/binlog_common.inc mysql-test/suite/perfschema/r/binlog_mix.result mysql-test/suite/perfschema/r/binlog_row.result mysql-test/suite/perfschema/r/binlog_stmt.result mysql-test/suite/perfschema/r/server_init.result mysql-test/suite/perfschema/t/binlog_mix.test mysql-test/suite/perfschema/t/binlog_row.test mysql-test/suite/perfschema/t/binlog_stmt.test mysql-test/suite/perfschema/t/server_init.test mysql-test/suite/rpl/r/rpl_heartbeat_basic.result mysql-test/suite/rpl/r/rpl_row_show_relaylog_events.result mysql-test/suite/rpl/r/rpl_stm_mix_show_relaylog_events.result mysql-test/suite/rpl/t/rpl_heartbeat_basic.test mysql-test/t/auto_increment.test mysql-test/t/bug46261.test mysql-test/t/fulltext_plugin.test mysql-test/t/func_math.test mysql-test/t/func_str.test mysql-test/t/gis.test mysql-test/t/innodb_mysql_sync.test mysql-test/t/join_outer.test mysql-test/t/mysqlbinlog_row_big.test mysql-test/t/mysqldump.test mysql-test/t/mysqltest.test mysql-test/t/not_embedded_server.test mysql-test/t/partition.test mysql-test/t/partition_error.test mysql-test/t/partition_range.test mysql-test/t/plugin.test mysql-test/t/plugin_auth_qa_2-master.opt mysql-test/t/plugin_auth_qa_3-master.opt mysql-test/t/plugin_not_embedded.test mysql-test/t/show_check.test mysql-test/t/type_timestamp.test mysql-test/t/udf.test mysql-test/t/union.test mysql-test/t/view_grant.test mysys/mf_iocache.c mysys/mf_iocache2.c mysys/mf_keycache.c mysys/mf_keycaches.c mysys/my_bitmap.c mysys/my_fopen.c mysys/my_fstream.c mysys/my_gethostbyname.c mysys/my_getsystime.c mysys/my_init.c mysys/my_lib.c mysys/my_open.c mysys/my_pread.c mysys/my_pthread.c mysys/my_read.c mysys/my_static.c mysys/my_thr_init.c mysys/my_write.c mysys/mysys_priv.h mysys/thr_alarm.c mysys/thr_lock.c mysys/thr_mutex.c mysys/thr_rwlock.c sql-common/client.c sql-common/client_plugin.c sql/bounded_queue.h sql/client_settings.h sql/filesort.cc sql/handler.cc sql/handler.h sql/item.cc sql/item.h sql/item_cmpfunc.cc sql/item_func.cc sql/item_func.h sql/item_geofunc.h sql/item_strfunc.cc sql/item_strfunc.h sql/item_subselect.cc sql/item_timefunc.h sql/log.cc sql/log_event.cc sql/log_event.h sql/my_decimal.h sql/mysqld.cc sql/mysqld.h sql/net_serv.cc sql/sql_admin.cc sql/sql_analyse.cc sql/sql_base.cc sql/sql_partition.cc sql/sql_select.cc sql/sql_select.h sql/sql_show.cc sql/sql_string.cc sql/sql_string.h sql/sql_udf.cc sql/sql_view.cc sql/sql_yacc.yy sql/table.cc storage/heap/heapdef.h storage/heap/hp_block.c storage/heap/hp_create.c storage/heap/hp_open.c storage/heap/hp_static.c storage/heap/hp_test2.c storage/innobase/btr/btr0btr.c storage/innobase/btr/btr0cur.c storage/innobase/buf/buf0buf.c storage/innobase/dict/dict0dict.c storage/innobase/fsp/fsp0fsp.c storage/innobase/handler/ha_innodb.cc storage/innobase/handler/i_s.cc storage/innobase/include/btr0cur.h storage/innobase/include/data0data.h storage/innobase/include/data0data.ic storage/innobase/include/row0upd.h storage/innobase/include/srv0srv.h storage/innobase/include/sync0rw.h storage/innobase/include/trx0i_s.h storage/innobase/include/trx0purge.h storage/innobase/include/univ.i storage/innobase/log/log0recv.c storage/innobase/row/row0mysql.c storage/innobase/row/row0purge.c storage/innobase/row/row0umod.c storage/innobase/row/row0upd.c storage/innobase/srv/srv0srv.c storage/innobase/srv/srv0start.c storage/innobase/trx/trx0i_s.c storage/innobase/trx/trx0purge.c storage/innobase/ut/ut0dbg.c storage/myisam/ha_myisam.cc storage/myisam/mi_check.c storage/myisam/mi_close.c storage/myisam/mi_delete.c storage/myisam/mi_delete_all.c storage/myisam/mi_dynrec.c storage/myisam/mi_log.c storage/myisam/mi_open.c storage/myisam/mi_static.c storage/myisam/mi_statrec.c storage/myisam/mi_update.c storage/myisam/mi_write.c storage/myisam/myisamdef.h storage/myisam/sort.c storage/myisammrg/myrg_def.h strings/decimal.c tests/thread_test.c unittest/gunit/CMakeLists.txt === modified file 'include/mysql/psi/mysql_socket.h' (properties changed: -x to +x) --- a/include/mysql/psi/mysql_socket.h 2010-12-07 18:55:54 +0000 +++ b/include/mysql/psi/mysql_socket.h 2011-01-24 22:00:10 +0000 @@ -27,7 +27,14 @@ Foundation, Inc., 51 Franklin St, Fifth #include /* For socket api */ //#include -#include +#ifdef __WIN__ + #include + #include + #define SOCKBUF_T char +#else + #include + #define SOCKBUF_T void +#endif /** @file mysql/psi/mysql_socket.h [...] @@ -140,14 +147,6 @@ inline_mysql_end_socket_wait(struct PSI_ #endif #ifdef HAVE_PSI_INTERFACE - #define mysql_socket_socketpair(K, D, T, P, FDS) \ - inline_mysql_socket_socketpair(K, D, T, P, FDS) -#else - #define mysql_socket_socketpair(K, D, T, P, FDS) \ - inline_mysql_socket_socketpair(D, T, P, FDS) -#endif - -#ifdef HAVE_PSI_INTERFACE #define mysql_socket_bind(FD, A, L) \ inline_mysql_socket_bind(__FILE__, __LINE__, FD, A, L) #else @@ -212,22 +211,6 @@ inline_mysql_end_socket_wait(struct PSI_ #endif #ifdef HAVE_PSI_INTERFACE - #define mysql_socket_sendmsg(FD, M, FL) \ - inline_mysql_socket_sendmsg(__FILE__, __LINE__, FD, M, FL) -#else - #define mysql_socket_sendmsg(FD, M, FL) \ - inline_mysql_socket_sendmsg(FD, M, FL) -#endif - -#ifdef HAVE_PSI_INTERFACE - #define mysql_socket_recvmsg(FD, M, FL) \ - inline_mysql_socket_recvmsg(__FILE__, __LINE__, FD, M, FL) -#else - #define_mysql_socket_recvmsg(FD, M, FL) \ - inline_mysql_socket_recvmsg(FD, M, FL) -#endif - -#ifdef HAVE_PSI_INTERFACE #define mysql_socket_getsockopt(FD, LV, ON, OP, OL) \ inline_mysql_socket_getsockopt(__FILE__, __LINE__, FD, LV, ON, OP, OL) #else @@ -259,16 +242,15 @@ inline_mysql_end_socket_wait(struct PSI_ inline_mysql_socket_accept(FD, A, LP) #endif +/** Not supported by P_S */ #if 0 - -#ifdef HAVE_PSI_INTERFACE - #define mysql_socket_accept4(K, FD, A, LP, FL) \ - inline_mysql_socket_accept4(K, __FILE__, __LINE__, FD, A, LP, FL) -#else - #define mysql_socket_accept4(FD, A, LP, FL) \ - inline_mysql_socket_accept4(FD, A, LP, FL) -#endif - + #ifdef HAVE_PSI_INTERFACE + #define mysql_socket_accept4(K, FD, A, LP, FL) \ + inline_mysql_socket_accept4(K, __FILE__, __LINE__, FD, A, LP, FL) + #else + #define mysql_socket_accept4(FD, A, LP, FL) \ + inline_mysql_socket_accept4(FD, A, LP, FL) + #endif #endif #ifdef HAVE_PSI_INTERFACE @@ -287,21 +269,58 @@ inline_mysql_end_socket_wait(struct PSI_ inline_mysql_socket_shutdown(FD, H) #endif -#ifdef HAVE_PSI_INTERFACE - #define mysql_socket_sockatmark(FD) \ - inline_mysql_socket_sockatmark(__FILE__, __LINE__, FD) -#else - #define mysql_socket_sockatmark(FD) \ - inline_mysql_socket_sockatmark(FD) -#endif +/** Not supported by Winsock */ +#ifdef __WIN__ + + #define mysql_socket_sendmsg(FD, M, FL) + #define mysql_socket_recvmsg(FD, M, FL) + #define mysql_socket_sockatmark(FD) + #define mysql_socket_isfdtype(FD, FT) + #define mysql_socket_socketpair(K, D, T, P, FDS) -#ifdef HAVE_PSI_INTERFACE - #define mysql_socket_isfdtype(FD, FT) \ - inline_mysql_socket_isfdtype(__FILE__, __LINE__, FD, FT) #else - #define mysql_socket_isfdtype(FD, FT) \ - inline_mysql_socket_isfdtype(FD, FT) -#endif + + #ifdef HAVE_PSI_INTERFACE + #define mysql_socket_sendmsg(FD, M, FL) \ + inline_mysql_socket_sendmsg(__FILE__, __LINE__, FD, M, FL) + #else + #define mysql_socket_sendmsg(FD, M, FL) \ + inline_mysql_socket_sendmsg(FD, M, FL) + #endif + + #ifdef HAVE_PSI_INTERFACE + #define mysql_socket_recvmsg(FD, M, FL) \ + inline_mysql_socket_recvmsg(__FILE__, __LINE__, FD, M, FL) + #else + #define_mysql_socket_recvmsg(FD, M, FL) \ + inline_mysql_socket_recvmsg(FD, M, FL) + #endif + + #ifdef HAVE_PSI_INTERFACE + #define mysql_socket_sockatmark(FD) \ + inline_mysql_socket_sockatmark(__FILE__, __LINE__, FD) + #else + #define mysql_socket_sockatmark(FD) \ + inline_mysql_socket_sockatmark(FD) + #endif + + #ifdef HAVE_PSI_INTERFACE + #define mysql_socket_isfdtype(FD, FT) \ + inline_mysql_socket_isfdtype(__FILE__, __LINE__, FD, FT) + #else + #define mysql_socket_isfdtype(FD, FT) \ + inline_mysql_socket_isfdtype(FD, FT) + #endif + + #ifdef HAVE_PSI_INTERFACE + #define mysql_socket_socketpair(K, D, T, P, FDS) \ + inline_mysql_socket_socketpair(K, D, T, P, FDS) + #else + #define mysql_socket_socketpair(K, D, T, P, FDS) \ + inline_mysql_socket_socketpair(D, T, P, FDS) + #endif + +#endif //__WIN__ struct st_mysql_socket { @@ -351,39 +370,6 @@ inline_mysql_socket_socket return mysql_socket; } -/** mysql_socket_socketpair */ - -static inline int -inline_mysql_socket_socketpair -( -#ifdef HAVE_PSI_INTERFACE - PSI_socket_key key, -#endif - int domain, int type, int protocol, MYSQL_SOCKET mysql_socket[2]) -{ - int result= 0; - int fds[2]= {0, 0}; - - mysql_socket[0].m_psi= PSI_server ? PSI_server->init_socket(key, &mysql_socket[0].fd) - : NULL; - mysql_socket[1].m_psi= PSI_server ? PSI_server->init_socket(key, &mysql_socket[1].fd) - : NULL; - - result= socketpair(domain, type, protocol, fds); - - mysql_socket[0].fd = fds[0]; - mysql_socket[1].fd = fds[1]; - -#ifdef HAVE_PSI_INTERFACE - if (likely(mysql_socket[0].m_psi != NULL && mysql_socket[1].m_psi != NULL)) - { - PSI_server->set_socket_descriptor(mysql_socket[0].m_psi, fds[0]); - PSI_server->set_socket_descriptor(mysql_socket[1].m_psi, fds[1]); - } -#endif - return result; -} - /** mysql_socket_bind */ static inline int @@ -426,7 +412,7 @@ inline_mysql_socket_getsockname #ifdef HAVE_PSI_INTERFACE const char *src_file, uint src_line, #endif - MYSQL_SOCKET mysql_socket, __SOCKADDR_ARG addr, socklen_t *len) + MYSQL_SOCKET mysql_socket, struct sockaddr *addr, socklen_t *len) { int result; #ifdef HAVE_PSI_INTERFACE @@ -456,7 +442,7 @@ inline_mysql_socket_connect #ifdef HAVE_PSI_INTERFACE const char *src_file, uint src_line, #endif - MYSQL_SOCKET mysql_socket, __CONST_SOCKADDR_ARG addr, socklen_t len) + MYSQL_SOCKET mysql_socket, const struct sockaddr *addr, socklen_t len) { int result; #ifdef HAVE_PSI_INTERFACE @@ -486,7 +472,7 @@ inline_mysql_socket_getpeername #ifdef HAVE_PSI_INTERFACE const char *src_file, uint src_line, #endif - MYSQL_SOCKET mysql_socket, __SOCKADDR_ARG addr, socklen_t *len) + MYSQL_SOCKET mysql_socket, struct sockaddr *addr, socklen_t *len) { int result; #ifdef HAVE_PSI_INTERFACE @@ -516,7 +502,7 @@ inline_mysql_socket_send #ifdef HAVE_PSI_INTERFACE const char *src_file, uint src_line, #endif - MYSQL_SOCKET mysql_socket, const void *buf, size_t n, int flags) + MYSQL_SOCKET mysql_socket, const SOCKBUF_T *buf, size_t n, int flags) { ssize_t result; #ifdef HAVE_PSI_INTERFACE @@ -549,7 +535,7 @@ inline_mysql_socket_recv #ifdef HAVE_PSI_INTERFACE const char *src_file, uint src_line, #endif - MYSQL_SOCKET mysql_socket, void *buf, size_t n, int flags) + MYSQL_SOCKET mysql_socket, SOCKBUF_T *buf, size_t n, int flags) { ssize_t result; #ifdef HAVE_PSI_INTERFACE @@ -582,7 +568,7 @@ inline_mysql_socket_sendto #ifdef HAVE_PSI_INTERFACE const char *src_file, uint src_line, #endif - MYSQL_SOCKET mysql_socket, const void *buf, size_t n, int flags, __CONST_SOCKADDR_ARG addr, socklen_t addr_len) + MYSQL_SOCKET mysql_socket, const SOCKBUF_T *buf, size_t n, int flags, const struct sockaddr *addr, socklen_t addr_len) { ssize_t result; #ifdef HAVE_PSI_INTERFACE @@ -615,7 +601,7 @@ inline_mysql_socket_recvfrom #ifdef HAVE_PSI_INTERFACE const char *src_file, uint src_line, #endif - MYSQL_SOCKET mysql_socket, void *buf, size_t n, int flags, __SOCKADDR_ARG addr, socklen_t *addr_len) + MYSQL_SOCKET mysql_socket, SOCKBUF_T *buf, size_t n, int flags, struct sockaddr *addr, socklen_t *addr_len) { ssize_t result; #ifdef HAVE_PSI_INTERFACE @@ -640,72 +626,6 @@ inline_mysql_socket_recvfrom return result; } -/** mysql_socket_sendmsg */ - -static inline ssize_t -inline_mysql_socket_sendmsg -( -#ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, -#endif - MYSQL_SOCKET mysql_socket, const struct msghdr *message, int flags) -{ - ssize_t result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_socket_locker *locker= NULL; - PSI_socket_locker_state state; - - if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) - { - locker= PSI_server->get_thread_socket_locker(&state, mysql_socket.m_psi, PSI_SOCKET_SEND); - if (likely(locker !=NULL)) - PSI_server->start_socket_wait(locker, (size_t)0, src_file, src_line); - } -#endif - result= sendmsg(mysql_socket.fd, message, flags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - { - size_t bytes_written = (result > -1) ? result : 0; - PSI_server->end_socket_wait(locker, bytes_written); - } -#endif - return result; -} - -/** mysql_socket_recvmsg */ - -static inline ssize_t -inline_mysql_socket_recvmsg -( -#ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, -#endif - MYSQL_SOCKET mysql_socket, struct msghdr *message, int flags) -{ - ssize_t result; -#ifdef HAVE_PSI_INTERFACE - struct PSI_socket_locker *locker= NULL; - PSI_socket_locker_state state; - - if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) - { - locker= PSI_server->get_thread_socket_locker(&state, mysql_socket.m_psi, PSI_SOCKET_RECV); - if (likely(locker !=NULL)) - PSI_server->start_socket_wait(locker, (size_t)0, src_file, src_line); - } -#endif - result= recvmsg(mysql_socket.fd, message, flags); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - { - size_t bytes_written = (result > -1) ? result : 0; - PSI_server->end_socket_wait(locker, bytes_written); - } -#endif - return result; -} - /** mysql_socket_getsockopt */ static inline int @@ -714,7 +634,7 @@ inline_mysql_socket_getsockopt #ifdef HAVE_PSI_INTERFACE const char *src_file, uint src_line, #endif - MYSQL_SOCKET mysql_socket, int level, int optname, void *optval, socklen_t *optlen) + MYSQL_SOCKET mysql_socket, int level, int optname, SOCKBUF_T *optval, socklen_t *optlen) { int result; #ifdef HAVE_PSI_INTERFACE @@ -744,7 +664,7 @@ inline_mysql_socket_setsockopt #ifdef HAVE_PSI_INTERFACE const char *src_file, uint src_line, #endif - MYSQL_SOCKET mysql_socket, int level, int optname, const void *optval, socklen_t optlen) + MYSQL_SOCKET mysql_socket, int level, int optname, const SOCKBUF_T *optval, socklen_t optlen) { int result; #ifdef HAVE_PSI_INTERFACE @@ -835,55 +755,83 @@ inline_mysql_socket_accept } /** mysql_socket_accept4 */ + #if 0 + static inline MYSQL_SOCKET + inline_mysql_socket_accept4 + ( + #ifdef HAVE_PSI_INTERFACE + PSI_socket_key key, const char *src_file, uint src_line, + #endif + MYSQL_SOCKET socket_listen, addr, socklen_t *addr_len, int flags) + { + MYSQL_SOCKET socket_accept = {0, NULL}; + #ifdef HAVE_PSI_INTERFACE + struct PSI_socket_locker *locker= NULL; + PSI_socket_locker_state state; + + socket_accept.m_psi = PSI_server ? PSI_server->init_socket(key, &socket_accept.fd) + : NULL; + if (likely(PSI_server != NULL && socket_accept.m_psi != NULL)) + { + locker= PSI_server->get_thread_socket_locker(socket_accept.m_psi, PSI_SOCKET_CONNECT); + if (likely(locker !=NULL)) + PSI_server->start_socket_wait(locker, (size_t)0, src_file, src_line); + } + #endif + socket_accept.fd= accept4(socket_listen.fd, addr, addr_len, flags); + #ifdef HAVE_PSI_INTERFACE + /** Set socket address info */ + if (likely(PSI_server != NULL && socket_accept.m_psi != NULL + && socket_accept.fd > -1)) + PSI_server->set_socket_info(socket_accept.m_psi, socket_accept.fd, addr); -static inline MYSQL_SOCKET -inline_mysql_socket_accept4 + if (likely(locker != NULL)) + PSI_server->end_socket_wait(locker, (size_t)0); + #endif + return socket_accept; + } +#endif + +/** mysql_socket_close */ + +static inline int +inline_mysql_socket_close ( #ifdef HAVE_PSI_INTERFACE - PSI_socket_key key, const char *src_file, uint src_line, + const char *src_file, uint src_line, #endif - MYSQL_SOCKET socket_listen, __SOCKADDR_ARG addr, socklen_t *addr_len, int flags) + MYSQL_SOCKET mysql_socket) { - MYSQL_SOCKET socket_accept = {0, NULL}; + int result; #ifdef HAVE_PSI_INTERFACE struct PSI_socket_locker *locker= NULL; PSI_socket_locker_state state; - socket_accept.m_psi = PSI_server ? PSI_server->init_socket(key, &socket_accept.fd) - : NULL; - if (likely(PSI_server != NULL && socket_accept.m_psi != NULL)) + if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) { - locker= PSI_server->get_thread_socket_locker(socket_accept.m_psi, PSI_SOCKET_CONNECT); + locker= PSI_server->get_thread_socket_locker(&state, mysql_socket.m_psi, PSI_SOCKET_CLOSE); if (likely(locker !=NULL)) PSI_server->start_socket_wait(locker, (size_t)0, src_file, src_line); } #endif - socket_accept.fd= accept4(socket_listen.fd, addr, addr_len, flags); + result= closesocket(mysql_socket.fd); #ifdef HAVE_PSI_INTERFACE - /** Set socket address info */ - if (likely(PSI_server != NULL && socket_accept.m_psi != NULL - && socket_accept.fd > -1)) - PSI_server->set_socket_info(socket_accept.m_psi, socket_accept.fd, addr); - if (likely(locker != NULL)) PSI_server->end_socket_wait(locker, (size_t)0); #endif - return socket_accept; + return result; } -#endif - - -/** mysql_socket_close */ +/** mysql_socket_shutdown */ static inline int -inline_mysql_socket_close +inline_mysql_socket_shutdown ( #ifdef HAVE_PSI_INTERFACE const char *src_file, uint src_line, #endif - MYSQL_SOCKET mysql_socket) + MYSQL_SOCKET mysql_socket, int how) { int result; #ifdef HAVE_PSI_INTERFACE @@ -892,12 +840,12 @@ inline_mysql_socket_close if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) { - locker= PSI_server->get_thread_socket_locker(&state, mysql_socket.m_psi, PSI_SOCKET_CLOSE); + locker= PSI_server->get_thread_socket_locker(&state, mysql_socket.m_psi, PSI_SOCKET_SHUTDOWN); if (likely(locker !=NULL)) PSI_server->start_socket_wait(locker, (size_t)0, src_file, src_line); } #endif - result= closesocket(mysql_socket.fd); + result= shutdown(mysql_socket.fd, how); #ifdef HAVE_PSI_INTERFACE if (likely(locker != NULL)) PSI_server->end_socket_wait(locker, (size_t)0); @@ -905,32 +853,72 @@ inline_mysql_socket_close return result; } -/** mysql_socket_shutdown */ +/** Not supported by Winsock */ -static inline int -inline_mysql_socket_shutdown +#ifndef __WIN__ + +/** mysql_socket_sendmsg */ + +static inline ssize_t +inline_mysql_socket_sendmsg ( #ifdef HAVE_PSI_INTERFACE const char *src_file, uint src_line, #endif - MYSQL_SOCKET mysql_socket, int how) + MYSQL_SOCKET mysql_socket, const struct msghdr *message, int flags) { - int result; + ssize_t result; #ifdef HAVE_PSI_INTERFACE struct PSI_socket_locker *locker= NULL; PSI_socket_locker_state state; if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) { - locker= PSI_server->get_thread_socket_locker(&state, mysql_socket.m_psi, PSI_SOCKET_SHUTDOWN); + locker= PSI_server->get_thread_socket_locker(&state, mysql_socket.m_psi, PSI_SOCKET_SEND); if (likely(locker !=NULL)) PSI_server->start_socket_wait(locker, (size_t)0, src_file, src_line); } #endif - result= shutdown(mysql_socket.fd, how); + result= sendmsg(mysql_socket.fd, message, flags); #ifdef HAVE_PSI_INTERFACE if (likely(locker != NULL)) - PSI_server->end_socket_wait(locker, (size_t)0); + { + size_t bytes_written = (result > -1) ? result : 0; + PSI_server->end_socket_wait(locker, bytes_written); + } +#endif + return result; +} + +/** mysql_socket_recvmsg */ + +static inline ssize_t +inline_mysql_socket_recvmsg +( +#ifdef HAVE_PSI_INTERFACE + const char *src_file, uint src_line, +#endif + MYSQL_SOCKET mysql_socket, struct msghdr *message, int flags) +{ + ssize_t result; +#ifdef HAVE_PSI_INTERFACE + struct PSI_socket_locker *locker= NULL; + PSI_socket_locker_state state; + + if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) + { + locker= PSI_server->get_thread_socket_locker(&state, mysql_socket.m_psi, PSI_SOCKET_RECV); + if (likely(locker !=NULL)) + PSI_server->start_socket_wait(locker, (size_t)0, src_file, src_line); + } +#endif + result= recvmsg(mysql_socket.fd, message, flags); +#ifdef HAVE_PSI_INTERFACE + if (likely(locker != NULL)) + { + size_t bytes_written = (result > -1) ? result : 0; + PSI_server->end_socket_wait(locker, bytes_written); + } #endif return result; } @@ -995,6 +983,41 @@ inline_mysql_socket_isfdtype return result; } +/** mysql_socket_socketpair */ + +static inline int +inline_mysql_socket_socketpair +( +#ifdef HAVE_PSI_INTERFACE + PSI_socket_key key, +#endif + int domain, int type, int protocol, MYSQL_SOCKET mysql_socket[2]) +{ + int result= 0; + int fds[2]= {0, 0}; + + mysql_socket[0].m_psi= PSI_server ? PSI_server->init_socket(key, &mysql_socket[0].fd) + : NULL; + mysql_socket[1].m_psi= PSI_server ? PSI_server->init_socket(key, &mysql_socket[1].fd) + : NULL; + + result= socketpair(domain, type, protocol, fds); + + mysql_socket[0].fd = fds[0]; + mysql_socket[1].fd = fds[1]; + +#ifdef HAVE_PSI_INTERFACE + if (likely(mysql_socket[0].m_psi != NULL && mysql_socket[1].m_psi != NULL)) + { + PSI_server->set_socket_descriptor(mysql_socket[0].m_psi, fds[0]); + PSI_server->set_socket_descriptor(mysql_socket[1].m_psi, fds[1]); + } +#endif + return result; +} + +#endif // __WIN__ + /** @} (end of group Socket_instrumentation) */ #endif === modified file 'storage/perfschema/pfs.cc' --- a/storage/perfschema/pfs.cc 2010-12-08 03:24:30 +0000 +++ b/storage/perfschema/pfs.cc 2011-01-24 22:00:10 +0000 @@ -17,7 +17,11 @@ @file storage/perfschema/pfs.cc The performance schema implementation of all instruments. */ -#include +#ifdef __WIN__ + #include +#else + #include +#endif #include "my_global.h" #include "my_pthread.h" #include "sql_const.h" @@ -3443,6 +3447,56 @@ static void set_socket_descriptor_v1(PSI pfs->m_fd= fd; } +#ifdef __WIN__ +const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt) +{ + if (af == AF_INET) + { + struct sockaddr_in in; + memset(&in, 0, sizeof(in)); + in.sin_family = AF_INET; + memcpy(&in.sin_addr, src, sizeof(struct in_addr)); + getnameinfo((struct sockaddr *)&in, sizeof(struct sockaddr_in), dst, cnt, NULL, 0, NI_NUMERICHOST); + return dst; + } + else if (af == AF_INET6) + { + struct sockaddr_in6 in; + memset(&in, 0, sizeof(in)); + in.sin6_family = AF_INET6; + memcpy(&in.sin6_addr, src, sizeof(struct in_addr6)); + getnameinfo((struct sockaddr *)&in, sizeof(struct sockaddr_in6), dst, cnt, NULL, 0, NI_NUMERICHOST); + return dst; + } + return NULL; +} + +int inet_pton(int af, const char *src, void *dst) +{ + struct addrinfo hints, *res, *ressave; + + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_family = af; + + if (getaddrinfo(src, NULL, &hints, &res) != 0) + { + // dolog(LOG_ERR, "Couldn't resolve host %s\n", src); //TBD + return -1; + } + + ressave = res; + + while (res) + { + memcpy(dst, res->ai_addr, res->ai_addrlen); + res = res->ai_next; + } + + freeaddrinfo(ressave); + return 0; +} +#endif // __WIN32 + static void set_socket_address_v1(PSI_socket *socket, const struct sockaddr * socket_addr) { === modified file 'storage/perfschema/pfs_instr.h' --- a/storage/perfschema/pfs_instr.h 2010-12-08 03:24:30 +0000 +++ b/storage/perfschema/pfs_instr.h 2011-01-24 22:00:10 +0000 @@ -29,7 +29,11 @@ struct PFS_table_share; struct PFS_thread_class; struct PFS_socket_class; +#ifdef __WIN__ +#include +#else #include +#endif #include "pfs_lock.h" #include "pfs_stat.h" #include "pfs_instr_class.h" --===============1253896534216259785== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/chris.powers@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: chris.powers@stripped # target_branch: file:///home/cpowers/work/dev/mysql-trunk-wl4896/ # testament_sha1: 86405020aa04360431dcc0c1f6fdbc0281fbb45f # timestamp: 2011-01-24 16:01:36 -0600 # base_revision_id: chris.powers@stripped\ # swybfz4zi8iu7c1k # # Begin bundle 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 --===============1253896534216259785==--