From: Christopher Powers Date: August 14 2010 9:23pm Subject: bzr commit into mysql-next-mr-wl4896 branch (chris.powers:3162) WL#4896 List-Archive: http://lists.mysql.com/commits/115738 Message-Id: <20100814212322.DF4C51DB0316@xeno.mysql.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0511992171646170198==" --===============0511992171646170198== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/cpowers/work/dev/dev-wl4896/mysql/ based on revid:chris.powers@stripped 3162 Christopher Powers 2010-08-14 WL#4896 PERFORMANCE_SCHEMA Net IO - Instrumented vio_read() and vio_write() - Added mysql_socket_vio_new() to accommodate MYSQL_SOCKET modified: include/mysql/psi/mysql_socket.h include/violite.h sql/mysqld.cc storage/perfschema/pfs.cc vio/vio.c vio/viosocket.c === modified file 'include/mysql/psi/mysql_socket.h' --- a/include/mysql/psi/mysql_socket.h 2010-08-11 19:48:41 +0000 +++ b/include/mysql/psi/mysql_socket.h 2010-08-14 21:23:17 +0000 @@ -53,7 +53,7 @@ Foundation, Inc., 51 Franklin St, Fifth */ #ifdef HAVE_PSI_INTERFACE #define MYSQL_SOCKET_WAIT_VARIABLES(LOCKER, STATE) \ - PSI_socket_locker* LOCKER; \ + struct PSI_socket_locker* LOCKER; \ PSI_socket_locker_state STATE; #else #define MYSQL_SOCKET_WAIT_VARIABLES(LOCKER, STATE) @@ -63,17 +63,21 @@ Foundation, Inc., 51 Franklin St, Fifth @def MYSQL_START_SOCKET_WAIT Instrumentation helper for socket waits. This instrumentation marks the start of a wait event. + @param LOCKER the locker + @param STATE the locker state @param PSI The instrumented socket @param OP The socket operation to be performed - @param INDEX The socket index used if any, or MAY_KEY. + @param INDEX The socket index used if any, or MAX_KEY. @param FLAGS Per socket operation flags. + @param COUNT Bytes written or -1 @sa MYSQL_END_SOCKET_WAIT. */ #ifdef HAVE_PSI_INTERFACE - #define MYSQL_START_SOCKET_WAIT(PSI, OP, INDEX, FLAGS) \ - inline_mysql_start_socket_wait(PSI, OP, INDEX, FLAGS, COUNT, __FILE__, __LINE__) + #define MYSQL_START_SOCKET_WAIT(LOCKER, STATE, PSI, OP, INDEX, FLAGS, COUNT) \ + LOCKER= inline_mysql_start_socket_wait(STATE, PSI, OP, INDEX, FLAGS, COUNT,\ + __FILE__, __LINE__) #else - #define MYSQL_START_SOCKET_WAIT(PSI, OP, INDEX, FLAGS, COUNT) \ + #define MYSQL_START_SOCKET_WAIT(LOCKER, STATE, PSI, OP, INDEX, FLAGS, COUNT) \ do {} while (0) #endif @@ -84,10 +88,10 @@ Foundation, Inc., 51 Franklin St, Fifth @sa MYSQL_START_SOCKET_WAIT. */ #ifdef HAVE_PSI_INTERFACE - #define MYSQL_END_SOCKET_WAIT(L, C) \ - inline_mysql_end_socket_wait(L, C) + #define MYSQL_END_SOCKET_WAIT(LOCKER, COUNT) \ + inline_mysql_end_socket_wait(LOCKER, COUNT) #else - #define MYSQL_END_SOCKET_WAIT(L, C) \ + #define MYSQL_END_SOCKET_WAIT(LOCKER, COUNT) \ do {} while (0) #endif @@ -98,13 +102,13 @@ Foundation, Inc., 51 Franklin St, Fifth Instrumentation calls for MYSQL_START_SOCKET_WAIT. @sa MYSQL_START_SOCKET_WAIT. */ -static inline PSI_socket_locker * +static inline struct PSI_socket_locker* inline_mysql_start_socket_wait(PSI_socket_locker_state *state, - PSI_socket *psi, enum PSI_socket_operation op, - uint index, ulong flags, size_t count, - const char *src_file, int src_line) + struct PSI_socket *psi, enum PSI_socket_operation op, + uint index, ulong flags, size_t count, + const char *src_file, int src_line) { - PSI_socket_locker *locker= NULL; + struct PSI_socket_locker *locker= NULL; if (likely(PSI_server && psi)) { @@ -120,7 +124,7 @@ inline_mysql_start_socket_wait(PSI_socke @sa MYSQL_END_SOCKET_WAIT. */ static inline void -inline_mysql_end_socket_wait(PSI_socket_locker *locker, size_t count) +inline_mysql_end_socket_wait(struct PSI_socket_locker *locker, size_t count) { if (likely(locker != NULL)) PSI_server->end_socket_wait(locker, count); @@ -137,10 +141,10 @@ inline_mysql_end_socket_wait(PSI_socket_ #endif #ifdef HAVE_PSI_INTERFACE - #define mysql_socket_socketpair(D, T, P, FDS) \ - inline_mysql_socket_socketpair(__FILE__, __LINE__, D, T, P, FDS) + #define mysql_socket_socketpair(K, D, T, P, FDS) \ + inline_mysql_socket_socketpair(K, __FILE__, __LINE__, D, T, P, FDS) #else - #define mysql_socket_socketpair(D, T, P, FDS) \ + #define mysql_socket_socketpair(K, D, T, P, FDS) \ inline_mysql_socket_socketpair(D, T, P, FDS) #endif @@ -311,7 +315,7 @@ struct st_mysql_socket for binary compatibility of the @c MYSQL_FILE interface. */ - PSI_socket *m_psi; + struct PSI_socket *m_psi; }; /** @@ -354,29 +358,30 @@ static inline int inline_mysql_socket_socketpair ( #ifdef HAVE_PSI_INTERFACE - const char *src_file, uint src_line, + PSI_socket_key key, const char *src_file, uint src_line, #endif - int domain, int type, int protocol, int fds[2]) + int domain, int type, int protocol, MYSQL_SOCKET mysql_socket[2]) { - int result = 0; -#if 0 //TBD -#ifdef HAVE_PSI_INTERFACE - PSI_socket_locker *locker= NULL; - PSI_socket_locker_state state; + int result= 0; + int fds[2]= {0, 0}; - if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) + 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)) { - locker= PSI_server->get_thread_socket_locker(&state, mysql_socket.m_psi, PSI_SOCKET_CREATE); - if (likely(locker !=NULL)) - PSI_server->start_socket_wait(locker, (size_t)0, src_file, src_line); + 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 - result= socketpair(int domain, int type, int protocol, int fds[2]); -#ifdef HAVE_PSI_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_socket_wait(locker, (size_t)0); -#endif -#endif return result; } @@ -388,11 +393,11 @@ inline_mysql_socket_bind #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 - PSI_socket_locker *locker= NULL; + struct PSI_socket_locker *locker= NULL; PSI_socket_locker_state state; if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) @@ -426,7 +431,7 @@ inline_mysql_socket_getsockname { int result; #ifdef HAVE_PSI_INTERFACE - PSI_socket_locker *locker= NULL; + struct PSI_socket_locker *locker= NULL; PSI_socket_locker_state state; if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) @@ -456,7 +461,7 @@ inline_mysql_socket_connect { int result; #ifdef HAVE_PSI_INTERFACE - PSI_socket_locker *locker= NULL; + struct PSI_socket_locker *locker= NULL; PSI_socket_locker_state state; if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) @@ -486,7 +491,7 @@ inline_mysql_socket_getpeername { int result; #ifdef HAVE_PSI_INTERFACE - PSI_socket_locker *locker= NULL; + struct PSI_socket_locker *locker= NULL; PSI_socket_locker_state state; if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) @@ -516,7 +521,7 @@ inline_mysql_socket_send { ssize_t result; #ifdef HAVE_PSI_INTERFACE - PSI_socket_locker *locker= NULL; + struct PSI_socket_locker *locker= NULL; PSI_socket_locker_state state; if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) @@ -549,7 +554,7 @@ inline_mysql_socket_recv { ssize_t result; #ifdef HAVE_PSI_INTERFACE - PSI_socket_locker *locker= NULL; + struct PSI_socket_locker *locker= NULL; PSI_socket_locker_state state; if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) @@ -582,7 +587,7 @@ inline_mysql_socket_sendto { ssize_t result; #ifdef HAVE_PSI_INTERFACE - PSI_socket_locker *locker= NULL; + struct PSI_socket_locker *locker= NULL; PSI_socket_locker_state state; if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) @@ -615,7 +620,7 @@ inline_mysql_socket_recvfrom { ssize_t result; #ifdef HAVE_PSI_INTERFACE - PSI_socket_locker *locker= NULL; + struct PSI_socket_locker *locker= NULL; PSI_socket_locker_state state; if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) @@ -648,7 +653,7 @@ inline_mysql_socket_sendmsg { ssize_t result; #ifdef HAVE_PSI_INTERFACE - PSI_socket_locker *locker= NULL; + struct PSI_socket_locker *locker= NULL; PSI_socket_locker_state state; if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) @@ -681,7 +686,7 @@ inline_mysql_socket_recvmsg { ssize_t result; #ifdef HAVE_PSI_INTERFACE - PSI_socket_locker *locker= NULL; + struct PSI_socket_locker *locker= NULL; PSI_socket_locker_state state; if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) @@ -714,7 +719,7 @@ inline_mysql_socket_getsockopt { int result; #ifdef HAVE_PSI_INTERFACE - PSI_socket_locker *locker= NULL; + struct PSI_socket_locker *locker= NULL; PSI_socket_locker_state state; if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) @@ -744,7 +749,7 @@ inline_mysql_socket_setsockopt { int result; #ifdef HAVE_PSI_INTERFACE - PSI_socket_locker *locker= NULL; + struct PSI_socket_locker *locker= NULL; PSI_socket_locker_state state; if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) @@ -774,7 +779,7 @@ inline_mysql_socket_listen { int result; #ifdef HAVE_PSI_INTERFACE - PSI_socket_locker *locker= NULL; + struct PSI_socket_locker *locker= NULL; PSI_socket_locker_state state; if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) @@ -800,11 +805,11 @@ inline_mysql_socket_accept #ifdef HAVE_PSI_INTERFACE PSI_socket_key key, const char *src_file, uint src_line, #endif - MYSQL_SOCKET socket_listen, __SOCKADDR_ARG addr, socklen_t *addr_len) + MYSQL_SOCKET socket_listen, struct sockaddr *addr, socklen_t *addr_len) { MYSQL_SOCKET socket_accept = {0, NULL}; #ifdef HAVE_PSI_INTERFACE - PSI_socket_locker *locker= NULL; + 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) @@ -843,7 +848,7 @@ inline_mysql_socket_accept4 { MYSQL_SOCKET socket_accept = {0, NULL}; #ifdef HAVE_PSI_INTERFACE - PSI_socket_locker *locker= NULL; + 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) @@ -883,7 +888,7 @@ inline_mysql_socket_close { int result; #ifdef HAVE_PSI_INTERFACE - PSI_socket_locker *locker= NULL; + struct PSI_socket_locker *locker= NULL; PSI_socket_locker_state state; if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) @@ -913,7 +918,7 @@ inline_mysql_socket_shutdown { int result; #ifdef HAVE_PSI_INTERFACE - PSI_socket_locker *locker= NULL; + struct PSI_socket_locker *locker= NULL; PSI_socket_locker_state state; if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) @@ -943,7 +948,7 @@ inline_mysql_socket_sockatmark { int result; #ifdef HAVE_PSI_INTERFACE - PSI_socket_locker *locker= NULL; + struct PSI_socket_locker *locker= NULL; PSI_socket_locker_state state; if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) @@ -973,7 +978,7 @@ inline_mysql_socket_isfdtype { int result; #ifdef HAVE_PSI_INTERFACE - PSI_socket_locker *locker= NULL; + struct PSI_socket_locker *locker= NULL; PSI_socket_locker_state state; if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL)) @@ -991,7 +996,6 @@ inline_mysql_socket_isfdtype return result; } - /** @} (end of group Socket_instrumentation) */ #endif === modified file 'include/violite.h' --- a/include/violite.h 2010-04-13 15:04:45 +0000 +++ b/include/violite.h 2010-08-14 21:23:17 +0000 @@ -19,14 +19,15 @@ */ #ifndef vio_violite_h_ -#define vio_violite_h_ +#define vio_violite_h_ -#include "my_net.h" /* needed because of struct in_addr */ +#include "my_net.h" /* needed because of struct in_addr */ +#include /* Simple vio interface in C; The functions are implemented in violite.c */ -#ifdef __cplusplus +#ifdef __cplusplus extern "C" { #endif /* __cplusplus */ @@ -45,7 +46,8 @@ enum enum_vio_type #define VIO_BUFFERED_READ 2 /* use buffered read */ #define VIO_READ_BUFFER_SIZE 16384 /* size of read buffer */ -Vio* vio_new(my_socket sd, enum enum_vio_type type, uint flags); +Vio* vio_new(my_socket sd, enum enum_vio_type type, uint flags); +Vio* mysql_socket_vio_new(MYSQL_SOCKET mysql_socket, enum enum_vio_type type, uint flags); #ifdef __WIN__ Vio* vio_new_win32pipe(HANDLE hPipe); Vio* vio_new_win32shared_memory(HANDLE handle_file_map, @@ -59,29 +61,29 @@ Vio* vio_new_win32shared_memory(HANDLE h #define HANDLE void * #endif /* __WIN__ */ -void vio_delete(Vio* vio); -int vio_close(Vio* vio); +void vio_delete(Vio* vio); +int vio_close(Vio* vio); void vio_reset(Vio* vio, enum enum_vio_type type, my_socket sd, HANDLE hPipe, uint flags); -size_t vio_read(Vio *vio, uchar * buf, size_t size); +size_t vio_read(Vio *vio, uchar * buf, size_t size); size_t vio_read_buff(Vio *vio, uchar * buf, size_t size); -size_t vio_write(Vio *vio, const uchar * buf, size_t size); -int vio_blocking(Vio *vio, my_bool onoff, my_bool *old_mode); -my_bool vio_is_blocking(Vio *vio); +size_t vio_write(Vio *vio, const uchar * buf, size_t size); +int vio_blocking(Vio *vio, my_bool onoff, my_bool *old_mode); +my_bool vio_is_blocking(Vio *vio); /* setsockopt TCP_NODELAY at IPPROTO_TCP level, when possible */ -int vio_fastsend(Vio *vio); +int vio_fastsend(Vio *vio); /* setsockopt SO_KEEPALIVE at SOL_SOCKET level, when possible */ -int vio_keepalive(Vio *vio, my_bool onoff); +int vio_keepalive(Vio *vio, my_bool onoff); /* Whenever we should retry the last read/write operation. */ -my_bool vio_should_retry(Vio *vio); +my_bool vio_should_retry(Vio *vio); /* Check that operation was timed out */ -my_bool vio_was_interrupted(Vio *vio); +my_bool vio_was_interrupted(Vio *vio); /* Short text description of the socket for those, who are curious.. */ const char* vio_description(Vio *vio); /* Return the type of the connection */ enum enum_vio_type vio_type(Vio* vio); /* Return last error number */ -int vio_errno(Vio*vio); +int vio_errno(Vio*vio); /* Get socket number */ my_socket vio_fd(Vio*vio); /* Remote peer's address and name in text form */ @@ -137,37 +139,37 @@ int sslconnect(struct st_VioSSLFd*, Vio struct st_VioSSLFd *new_VioSSLConnectorFd(const char *key_file, const char *cert_file, - const char *ca_file, const char *ca_path, - const char *cipher); + const char *ca_file, const char *ca_path, + const char *cipher); struct st_VioSSLFd *new_VioSSLAcceptorFd(const char *key_file, const char *cert_file, - const char *ca_file,const char *ca_path, - const char *cipher, enum enum_ssl_init_error* error); + const char *ca_file,const char *ca_path, + const char *cipher, enum enum_ssl_init_error* error); void free_vio_ssl_acceptor_fd(struct st_VioSSLFd *fd); #endif /* ! EMBEDDED_LIBRARY */ #endif /* HAVE_OPENSSL */ void vio_end(void); -#ifdef __cplusplus +#ifdef __cplusplus } #endif #if !defined(DONT_MAP_VIO) -#define vio_delete(vio) (vio)->viodelete(vio) -#define vio_errno(vio) (vio)->vioerrno(vio) +#define vio_delete(vio) (vio)->viodelete(vio) +#define vio_errno(vio) (vio)->vioerrno(vio) #define vio_read(vio, buf, size) ((vio)->read)(vio,buf,size) #define vio_write(vio, buf, size) ((vio)->write)(vio, buf, size) #define vio_blocking(vio, set_blocking_mode, old_mode)\ - (vio)->vioblocking(vio, set_blocking_mode, old_mode) -#define vio_is_blocking(vio) (vio)->is_blocking(vio) -#define vio_fastsend(vio) (vio)->fastsend(vio) -#define vio_keepalive(vio, set_keep_alive) (vio)->viokeepalive(vio, set_keep_alive) -#define vio_should_retry(vio) (vio)->should_retry(vio) -#define vio_was_interrupted(vio) (vio)->was_interrupted(vio) -#define vio_close(vio) ((vio)->vioclose)(vio) -#define vio_peer_addr(vio, buf, prt, buflen) (vio)->peer_addr(vio, buf, prt, buflen) -#define vio_timeout(vio, which, seconds) (vio)->timeout(vio, which, seconds) + (vio)->vioblocking(vio, set_blocking_mode, old_mode) +#define vio_is_blocking(vio) (vio)->is_blocking(vio) +#define vio_fastsend(vio) (vio)->fastsend(vio) +#define vio_keepalive(vio, set_keep_alive) (vio)->viokeepalive(vio, set_keep_alive) +#define vio_should_retry(vio) (vio)->should_retry(vio) +#define vio_was_interrupted(vio) (vio)->was_interrupted(vio) +#define vio_close(vio) ((vio)->vioclose)(vio) +#define vio_peer_addr(vio, buf, prt, buflen) (vio)->peer_addr(vio, buf, prt, buflen) +#define vio_timeout(vio, which, seconds) (vio)->timeout(vio, which, seconds) #define vio_poll_read(vio, timeout) (vio)->poll_read(vio, timeout) #define vio_is_connected(vio) (vio)->is_connected(vio) #endif /* !defined(DONT_MAP_VIO) */ @@ -187,20 +189,20 @@ enum SSL_type /* This structure is for every connection on both sides */ struct st_vio { - my_socket sd; /* my_socket - real or imaginary */ - HANDLE hPipe; - my_bool localhost; /* Are we from localhost? */ - int fcntl_mode; /* Buffered fcntl(sd,F_GETFL) */ - struct sockaddr_storage local; /* Local internet address */ - struct sockaddr_storage remote; /* Remote internet address */ - int addrLen; /* Length of remote address */ - enum enum_vio_type type; /* Type of connection */ - char desc[30]; /* String description */ - char *read_buffer; /* buffer for vio_read_buff */ - char *read_pos; /* start of unfetched data in the - read buffer */ - char *read_end; /* end of unfetched data */ - /* function pointers. They are similar for socket/SSL/whatever */ + my_socket sd; /* my_socket - real or imaginary */ + MYSQL_SOCKET mysql_socket; /* socket handle for performance schema */ + HANDLE hPipe; + my_bool localhost; /* Are we from localhost? */ + int fcntl_mode; /* Buffered fcntl(sd,F_GETFL) */ + struct sockaddr_storage local; /* Local internet address */ + struct sockaddr_storage remote; /* Remote internet address */ + int addrLen; /* Length of remote address */ + enum enum_vio_type type; /* Type of connection */ + char desc[30]; /* String description */ + char *read_buffer; /* buffer for vio_read_buff */ + char *read_pos; /* start of unfetched data in the read buffer */ + char *read_end; /* end of unfetched data */ + /* Function pointers. They are similar for socket/SSL/whatever. */ void (*viodelete)(Vio*); int (*vioerrno)(Vio*); size_t (*read)(Vio*, uchar *, size_t); @@ -214,11 +216,11 @@ struct st_vio my_bool (*should_retry)(Vio*); my_bool (*was_interrupted)(Vio*); int (*vioclose)(Vio*); - void (*timeout)(Vio*, unsigned int which, unsigned int timeout); + void (*timeout)(Vio*, unsigned int which, unsigned int timeout); my_bool (*poll_read)(Vio *vio, uint timeout); my_bool (*is_connected)(Vio*); #ifdef HAVE_OPENSSL - void *ssl_arg; + void *ssl_arg; #endif #ifdef HAVE_SMEM HANDLE handle_file_map; === modified file 'sql/mysqld.cc' --- a/sql/mysqld.cc 2010-08-04 15:47:50 +0000 +++ b/sql/mysqld.cc 2010-08-14 21:23:17 +0000 @@ -5452,7 +5452,7 @@ void handle_connections_sockets() (void) mysql_socket_close(new_sock); continue; } - if (!(vio_tmp=vio_new(mysql_socket_getfd(new_sock), //TBD cwp + if (!(vio_tmp=mysql_socket_vio_new(new_sock, mysql_socket_getfd(sock) == mysql_socket_getfd(unix_sock) ? VIO_TYPE_SOCKET : VIO_TYPE_TCPIP, mysql_socket_getfd(sock) == mysql_socket_getfd(unix_sock) ? VIO_LOCALHOST: 0)) || === modified file 'storage/perfschema/pfs.cc' --- a/storage/perfschema/pfs.cc 2010-08-11 19:48:41 +0000 +++ b/storage/perfschema/pfs.cc 2010-08-14 21:23:17 +0000 @@ -1035,12 +1035,12 @@ init_socket_v1(PSI_socket_key key, const PFS_thread *pfs_thread= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS); if (unlikely(pfs_thread == NULL)) return NULL; - if (! pfs_thread->m_enabled) + if (!pfs_thread->m_enabled) return NULL; klass= find_socket_class(key); if (unlikely(klass == NULL)) return NULL; - if (! klass->m_enabled) + if (!klass->m_enabled) return NULL; pfs= create_socket(klass, identity); return reinterpret_cast (pfs); @@ -2328,8 +2328,7 @@ static void end_socket_wait_v1(PSI_socke wait->m_thread->m_wait_locker_count--; } -static void set_socket_descriptor_v1(PSI_socket *socket, - uint fd) +static void set_socket_descriptor_v1(PSI_socket *socket, uint fd) { DBUG_ASSERT(socket); PFS_socket *pfs= reinterpret_cast(socket); === modified file 'vio/vio.c' --- a/vio/vio.c 2010-07-08 21:20:08 +0000 +++ b/vio/vio.c 2010-08-14 21:23:17 +0000 @@ -155,6 +155,11 @@ static void vio_init(Vio* vio, enum enum vio->timeout =vio_timeout; vio->poll_read =vio_poll_read; vio->is_connected =vio_is_connected; + +#ifdef HAVE_PSI_INTERFACE + vio->mysql_socket.fd= sd; // TBDs + vio->mysql_socket.m_psi= NULL; +#endif DBUG_VOID_RETURN; } @@ -168,6 +173,17 @@ void vio_reset(Vio* vio, enum enum_vio_t vio_init(vio, type, sd, hPipe, flags); } +Vio *mysql_socket_vio_new(MYSQL_SOCKET mysql_socket, enum enum_vio_type type, uint flags) +{ + Vio *vio = vio_new(mysql_socket_getfd(mysql_socket), type, flags); + + if (vio) + { + vio->mysql_socket= mysql_socket; + } + + return (vio); +} /* Open the socket or TCP/IP connection and read the fnctl() status */ === modified file 'vio/viosocket.c' --- a/vio/viosocket.c 2010-06-22 23:15:38 +0000 +++ b/vio/viosocket.c 2010-08-14 21:23:17 +0000 @@ -28,14 +28,15 @@ int vio_errno(Vio *vio __attribute__((un } -size_t vio_read(Vio * vio, uchar* buf, size_t size) +size_t vio_read(Vio* vio, uchar* buf, size_t size) { size_t r; + size_t bytes_read= 0; + MYSQL_SOCKET_WAIT_VARIABLES(locker, state) /* no ';' */ DBUG_ENTER("vio_read"); DBUG_PRINT("enter", ("sd: %d buf: 0x%lx size: %u", vio->sd, (long) buf, - (uint) size)); - struct PSI_socket_locker *locker; - //locker= MYSQL_START_SOCKET_WAIT(m_psi, PSI_SOCKET_RECV, MAX_KEY, 0); + (uint) size)); + MYSQL_START_SOCKET_WAIT(locker, &state, vio->mysql_socket.m_psi, PSI_SOCKET_RECV, 0, 0, 0); /* Ensure nobody uses vio_read_buff and vio_read simultaneously */ DBUG_ASSERT(vio->read_end == vio->read_pos); @@ -45,6 +46,12 @@ size_t vio_read(Vio * vio, uchar* buf, s errno=0; /* For linux */ r = read(vio->sd, buf, size); #endif /* __WIN__ */ + +#ifdef HAVE_PSI_INTERFACE + bytes_read= (r != (size_t)-1) ? r : 0; +#endif + MYSQL_END_SOCKET_WAIT(locker, bytes_read); + #ifndef DBUG_OFF if (r == (size_t) -1) { @@ -52,8 +59,6 @@ size_t vio_read(Vio * vio, uchar* buf, s } #endif /* DBUG_OFF */ - //MYSQL_END_SOCKET_WAIT(locker); - DBUG_PRINT("exit", ("%ld", (long) r)); DBUG_RETURN(r); } @@ -107,14 +112,24 @@ size_t vio_read_buff(Vio *vio, uchar* bu size_t vio_write(Vio * vio, const uchar* buf, size_t size) { size_t r; + size_t bytes_written= 0; + MYSQL_SOCKET_WAIT_VARIABLES(locker, state) /* no ';' */ DBUG_ENTER("vio_write"); DBUG_PRINT("enter", ("sd: %d buf: 0x%lx size: %u", vio->sd, (long) buf, (uint) size)); + MYSQL_START_SOCKET_WAIT(locker, &state, vio->mysql_socket.m_psi, PSI_SOCKET_SEND, 0, 0, 0); + #ifdef __WIN__ r = send(vio->sd, buf, size,0); #else r = write(vio->sd, buf, size); #endif /* __WIN__ */ + +#ifdef HAVE_PSI_INTERFACE + bytes_written= (r != (size_t)-1) ? r : 0; +#endif +MYSQL_END_SOCKET_WAIT(locker, bytes_written); + #ifndef DBUG_OFF if (r == (size_t) -1) { @@ -193,7 +208,7 @@ vio_is_blocking(Vio * vio) } -int vio_fastsend(Vio * vio __attribute__((unused))) +int vio_fastsend(Vio* vio __attribute__((unused))) { int r=0; DBUG_ENTER("vio_fastsend"); --===============0511992171646170198== 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/dev-wl4896/mysql/ # testament_sha1: f4bdb61c0c7d56745537fa78fa2076e770952de4 # timestamp: 2010-08-14 16:23:22 -0500 # base_revision_id: chris.powers@stripped\ # vls3loh35t80k4tx # # Begin bundle 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 3JFOFCQ0PL2AAA== --===============0511992171646170198==--