diff options
Diffstat (limited to 'include/mysql')
-rw-r--r-- | include/mysql/client_authentication.h | 13 | ||||
-rw-r--r-- | include/mysql/plugin.h | 12 | ||||
-rw-r--r-- | include/mysql/plugin_audit.h.pp | 2 | ||||
-rw-r--r-- | include/mysql/plugin_auth.h.pp | 2 | ||||
-rw-r--r-- | include/mysql/plugin_ftparser.h.pp | 2 | ||||
-rw-r--r-- | include/mysql/psi/mysql_file.h | 249 | ||||
-rw-r--r-- | include/mysql/psi/mysql_idle.h | 4 | ||||
-rw-r--r-- | include/mysql/psi/mysql_socket.h | 178 | ||||
-rw-r--r-- | include/mysql/psi/mysql_stage.h | 4 | ||||
-rw-r--r-- | include/mysql/psi/mysql_statement.h | 33 | ||||
-rw-r--r-- | include/mysql/psi/mysql_table.h | 69 | ||||
-rw-r--r-- | include/mysql/psi/mysql_thread.h | 80 | ||||
-rw-r--r-- | include/mysql/psi/psi.h | 120 | ||||
-rw-r--r-- | include/mysql/psi/psi_abi_v1.h.pp | 28 | ||||
-rw-r--r-- | include/mysql/service_debug_sync.h | 11 | ||||
-rw-r--r-- | include/mysql/service_my_plugin_log.h | 64 |
16 files changed, 557 insertions, 314 deletions
diff --git a/include/mysql/client_authentication.h b/include/mysql/client_authentication.h new file mode 100644 index 00000000000..2bd2fc98bac --- /dev/null +++ b/include/mysql/client_authentication.h @@ -0,0 +1,13 @@ +#ifndef CLIENT_AUTHENTICATION_H +#define CLIENT_AUTHENTICATION_H +#include "mysql.h" +#include "mysql/client_plugin.h" + +C_MODE_START +int sha256_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql); +int sha256_password_init(char *, size_t, int, va_list); +int sha256_password_deinit(void); +C_MODE_END + +#endif + diff --git a/include/mysql/plugin.h b/include/mysql/plugin.h index 38573180232..4220e73ee11 100644 --- a/include/mysql/plugin.h +++ b/include/mysql/plugin.h @@ -45,6 +45,8 @@ class Item; #define MYSQL_THD void* #endif +typedef void * MYSQL_PLUGIN; + #include <mysql/services.h> #define MYSQL_XIDDATASIZE 128 @@ -69,10 +71,10 @@ typedef struct st_mysql_xid MYSQL_XID; */ /* MySQL plugin interface version */ -#define MYSQL_PLUGIN_INTERFACE_VERSION 0x0103 +#define MYSQL_PLUGIN_INTERFACE_VERSION 0x0104 /* MariaDB plugin interface version */ -#define MARIA_PLUGIN_INTERFACE_VERSION 0x0104 +#define MARIA_PLUGIN_INTERFACE_VERSION 0x0105 /* The allowable types of plugins @@ -85,7 +87,8 @@ typedef struct st_mysql_xid MYSQL_XID; #define MYSQL_AUDIT_PLUGIN 5 /* The Audit plugin type */ #define MYSQL_REPLICATION_PLUGIN 6 /* The replication plugin type */ #define MYSQL_AUTHENTICATION_PLUGIN 7 /* The authentication plugin type */ -#define MYSQL_MAX_PLUGIN_TYPE_NUM 8 /* The number of plugin types */ +#define MYSQL_VALIDATE_PASSWORD_PLUGIN 8 /* validate password plugin type */ +#define MYSQL_MAX_PLUGIN_TYPE_NUM 9 /* The number of plugin types */ /* We use the following strings to define licenses for plugins */ #define PLUGIN_LICENSE_PROPRIETARY 0 @@ -558,7 +561,7 @@ struct handlerton; /* API for Replication plugin. (MYSQL_REPLICATION_PLUGIN) */ - #define MYSQL_REPLICATION_INTERFACE_VERSION 0x0100 + #define MYSQL_REPLICATION_INTERFACE_VERSION 0x0200 /** Replication plugin descriptor @@ -606,6 +609,7 @@ int thd_sql_command(const MYSQL_THD thd); void **thd_ha_data(const MYSQL_THD thd, const struct handlerton *hton); void thd_storage_lock_wait(MYSQL_THD thd, long long value); int thd_tx_isolation(const MYSQL_THD thd); +int thd_tx_is_read_only(const MYSQL_THD thd); char *thd_security_context(MYSQL_THD thd, char *buffer, unsigned int length, unsigned int max_query_len); /* Increments the row counter, see THD::row_count */ diff --git a/include/mysql/plugin_audit.h.pp b/include/mysql/plugin_audit.h.pp index fbd4ec2dd3f..c3ba7eec0d6 100644 --- a/include/mysql/plugin_audit.h.pp +++ b/include/mysql/plugin_audit.h.pp @@ -1,4 +1,5 @@ #include "plugin.h" +typedef void * MYSQL_PLUGIN; #include <mysql/services.h> #include <mysql/service_my_snprintf.h> extern struct my_snprintf_service_st { @@ -232,6 +233,7 @@ int thd_sql_command(const void* thd); void **thd_ha_data(const void* thd, const struct handlerton *hton); void thd_storage_lock_wait(void* thd, long long value); int thd_tx_isolation(const void* thd); +int thd_tx_is_read_only(const void* thd); char *thd_security_context(void* thd, char *buffer, unsigned int length, unsigned int max_query_len); void thd_inc_row_count(void* thd); diff --git a/include/mysql/plugin_auth.h.pp b/include/mysql/plugin_auth.h.pp index 46811825142..4f04d51cb52 100644 --- a/include/mysql/plugin_auth.h.pp +++ b/include/mysql/plugin_auth.h.pp @@ -1,4 +1,5 @@ #include <mysql/plugin.h> +typedef void * MYSQL_PLUGIN; #include <mysql/services.h> #include <mysql/service_my_snprintf.h> extern struct my_snprintf_service_st { @@ -232,6 +233,7 @@ int thd_sql_command(const void* thd); void **thd_ha_data(const void* thd, const struct handlerton *hton); void thd_storage_lock_wait(void* thd, long long value); int thd_tx_isolation(const void* thd); +int thd_tx_is_read_only(const void* thd); char *thd_security_context(void* thd, char *buffer, unsigned int length, unsigned int max_query_len); void thd_inc_row_count(void* thd); diff --git a/include/mysql/plugin_ftparser.h.pp b/include/mysql/plugin_ftparser.h.pp index 49cf7e5b931..3a978645c24 100644 --- a/include/mysql/plugin_ftparser.h.pp +++ b/include/mysql/plugin_ftparser.h.pp @@ -1,4 +1,5 @@ #include "plugin.h" +typedef void * MYSQL_PLUGIN; #include <mysql/services.h> #include <mysql/service_my_snprintf.h> extern struct my_snprintf_service_st { @@ -185,6 +186,7 @@ int thd_sql_command(const void* thd); void **thd_ha_data(const void* thd, const struct handlerton *hton); void thd_storage_lock_wait(void* thd, long long value); int thd_tx_isolation(const void* thd); +int thd_tx_is_read_only(const void* thd); char *thd_security_context(void* thd, char *buffer, unsigned int length, unsigned int max_query_len); void thd_inc_row_count(void* thd); diff --git a/include/mysql/psi/mysql_file.h b/include/mysql/psi/mysql_file.h index 816ac713631..c226258f462 100644 --- a/include/mysql/psi/mysql_file.h +++ b/include/mysql/psi/mysql_file.h @@ -518,7 +518,7 @@ static inline void inline_mysql_file_register( ) { #ifdef HAVE_PSI_FILE_INTERFACE - PSI_CALL(register_file)(category, info, count); + PSI_FILE_CALL(register_file)(category, info, count); #endif } @@ -533,13 +533,13 @@ inline_mysql_file_fgets( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_stream_locker)(&state, file->m_psi, - PSI_FILE_READ); + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_READ); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, (size_t) size, src_file, src_line); + PSI_FILE_CALL(start_file_wait)(locker, (size_t) size, src_file, src_line); result= fgets(str, size, file->m_file); - PSI_CALL(end_file_wait)(locker, result ? strlen(result) : 0); + PSI_FILE_CALL(end_file_wait)(locker, result ? strlen(result) : 0); return result; } #endif @@ -559,13 +559,13 @@ inline_mysql_file_fgetc( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_stream_locker)(&state, file->m_psi, - PSI_FILE_READ); + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_READ); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, (size_t) 1, src_file, src_line); + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 1, src_file, src_line); result= fgetc(file->m_file); - PSI_CALL(end_file_wait)(locker, (size_t) 1); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) 1); return result; } #endif @@ -586,14 +586,14 @@ inline_mysql_file_fputs( struct PSI_file_locker *locker; PSI_file_locker_state state; size_t bytes; - locker= PSI_CALL(get_thread_file_stream_locker)(&state, file->m_psi, - PSI_FILE_WRITE); + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_WRITE); if (likely(locker != NULL)) { bytes= str ? strlen(str) : 0; - PSI_CALL(start_file_wait)(locker, bytes, src_file, src_line); + PSI_FILE_CALL(start_file_wait)(locker, bytes, src_file, src_line); result= fputs(str, file->m_file); - PSI_CALL(end_file_wait)(locker, bytes); + PSI_FILE_CALL(end_file_wait)(locker, bytes); return result; } #endif @@ -613,13 +613,13 @@ inline_mysql_file_fputc( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_stream_locker)(&state, file->m_psi, - PSI_FILE_WRITE); + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_WRITE); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, (size_t) 1, src_file, src_line); + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 1, src_file, src_line); result= fputc(c, file->m_file); - PSI_CALL(end_file_wait)(locker, (size_t) 1); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) 1); return result; } #endif @@ -639,15 +639,15 @@ inline_mysql_file_fprintf(MYSQL_FILE *file, const char *format, ...) #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_stream_locker)(&state, file->m_psi, - PSI_FILE_WRITE); + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_WRITE); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, (size_t) 0, __FILE__, __LINE__); + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, __FILE__, __LINE__); va_start(args, format); result= vfprintf(file->m_file, format, args); va_end(args); - PSI_CALL(end_file_wait)(locker, (size_t) result); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) result); return result; } #endif @@ -669,13 +669,13 @@ inline_mysql_file_vfprintf( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_stream_locker)(&state, file->m_psi, - PSI_FILE_WRITE); + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_WRITE); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); result= vfprintf(file->m_file, format, args); - PSI_CALL(end_file_wait)(locker, (size_t) result); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) result); return result; } #endif @@ -695,13 +695,13 @@ inline_mysql_file_fflush( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_stream_locker)(&state, file->m_psi, - PSI_FILE_FLUSH); + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_FLUSH); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); result= fflush(file->m_file); - PSI_CALL(end_file_wait)(locker, (size_t) 0); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); return result; } #endif @@ -727,13 +727,13 @@ inline_mysql_file_fstat( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_descriptor_locker)(&state, filenr, - PSI_FILE_FSTAT); + locker= PSI_FILE_CALL(get_thread_file_descriptor_locker) + (&state, filenr, PSI_FILE_FSTAT); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); result= my_fstat(filenr, stat_area, flags); - PSI_CALL(end_file_wait)(locker, (size_t) 0); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); return result; } #endif @@ -753,14 +753,13 @@ inline_mysql_file_stat( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_name_locker)(&state, - key, PSI_FILE_STAT, - path, &locker); + locker= PSI_FILE_CALL(get_thread_file_name_locker) + (&state, key, PSI_FILE_STAT, path, &locker); if (likely(locker != NULL)) { - PSI_CALL(start_file_open_wait)(locker, src_file, src_line); + PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line); result= my_stat(path, stat_area, flags); - PSI_CALL(end_file_wait)(locker, (size_t) 0); + PSI_FILE_CALL(end_file_open_wait)(locker, result); return result; } #endif @@ -780,14 +779,14 @@ inline_mysql_file_chsize( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_descriptor_locker)(&state, file, - PSI_FILE_CHSIZE); + locker= PSI_FILE_CALL(get_thread_file_descriptor_locker) + (&state, file, PSI_FILE_CHSIZE); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, (size_t) newlength, src_file, + PSI_FILE_CALL(start_file_wait)(locker, (size_t) newlength, src_file, src_line); result= my_chsize(file, newlength, filler, flags); - PSI_CALL(end_file_wait)(locker, (size_t) newlength); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) newlength); return result; } #endif @@ -810,14 +809,14 @@ inline_mysql_file_fopen( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_name_locker) + locker= PSI_FILE_CALL(get_thread_file_name_locker) (&state, key, PSI_FILE_STREAM_OPEN, filename, that); if (likely(locker != NULL)) { - that->m_psi= PSI_CALL(start_file_open_wait)(locker, src_file, - src_line); + PSI_FILE_CALL(start_file_open_wait) + (locker, src_file, src_line); that->m_file= my_fopen(filename, flags, myFlags); - PSI_CALL(end_file_open_wait)(locker); + that->m_psi= PSI_FILE_CALL(end_file_open_wait)(locker, that->m_file); if (unlikely(that->m_file == NULL)) { my_free(that); @@ -851,13 +850,13 @@ inline_mysql_file_fclose( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_stream_locker)(&state, file->m_psi, - PSI_FILE_STREAM_CLOSE); + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_STREAM_CLOSE); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + PSI_FILE_CALL(start_file_close_wait)(locker, src_file, src_line); result= my_fclose(file->m_file, flags); - PSI_CALL(end_file_wait)(locker, (size_t) 0); + PSI_FILE_CALL(end_file_close_wait)(locker, result); my_free(file); return result; } @@ -881,17 +880,17 @@ inline_mysql_file_fread( struct PSI_file_locker *locker; PSI_file_locker_state state; size_t bytes_read; - locker= PSI_CALL(get_thread_file_stream_locker)(&state, file->m_psi, - PSI_FILE_READ); + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_READ); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, count, src_file, src_line); + PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line); result= my_fread(file->m_file, buffer, count, flags); if (flags & (MY_NABP | MY_FNABP)) bytes_read= (result == 0) ? count : 0; else bytes_read= (result != MY_FILE_ERROR) ? result : 0; - PSI_CALL(end_file_wait)(locker, bytes_read); + PSI_FILE_CALL(end_file_wait)(locker, bytes_read); return result; } #endif @@ -912,17 +911,17 @@ inline_mysql_file_fwrite( struct PSI_file_locker *locker; PSI_file_locker_state state; size_t bytes_written; - locker= PSI_CALL(get_thread_file_stream_locker)(&state, file->m_psi, - PSI_FILE_WRITE); + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_WRITE); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, count, src_file, src_line); + PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line); result= my_fwrite(file->m_file, buffer, count, flags); if (flags & (MY_NABP | MY_FNABP)) bytes_written= (result == 0) ? count : 0; else bytes_written= (result != MY_FILE_ERROR) ? result : 0; - PSI_CALL(end_file_wait)(locker, bytes_written); + PSI_FILE_CALL(end_file_wait)(locker, bytes_written); return result; } #endif @@ -942,13 +941,13 @@ inline_mysql_file_fseek( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_stream_locker)(&state, file->m_psi, - PSI_FILE_SEEK); + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_SEEK); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); result= my_fseek(file->m_file, pos, whence, flags); - PSI_CALL(end_file_wait)(locker, (size_t) 0); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); return result; } #endif @@ -968,13 +967,13 @@ inline_mysql_file_ftell( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_stream_locker)(&state, file->m_psi, - PSI_FILE_TELL); + locker= PSI_FILE_CALL(get_thread_file_stream_locker) + (&state, file->m_psi, PSI_FILE_TELL); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); result= my_ftell(file->m_file, flags); - PSI_CALL(end_file_wait)(locker, (size_t) 0); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); return result; } #endif @@ -994,13 +993,13 @@ inline_mysql_file_create( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_CREATE, - filename, &locker); + locker= PSI_FILE_CALL(get_thread_file_name_locker) + (&state, key, PSI_FILE_CREATE, filename, &locker); if (likely(locker != NULL)) { - PSI_CALL(start_file_open_wait)(locker, src_file, src_line); + PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line); file= my_create(filename, create_flags, access_flags, myFlags); - PSI_CALL(end_file_open_wait_and_bind_to_descriptor)(locker, file); + PSI_FILE_CALL(end_file_open_wait_and_bind_to_descriptor)(locker, file); return file; } #endif @@ -1024,7 +1023,7 @@ inline_mysql_file_create_temp( */ file= create_temp_file(to, dir, pfx, mode, myFlags); #ifdef HAVE_PSI_FILE_INTERFACE - PSI_CALL(create_file)(key, to, file); + PSI_FILE_CALL(create_file)(key, to, file); #endif return file; } @@ -1040,13 +1039,13 @@ inline_mysql_file_open( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_OPEN, - filename, &locker); + locker= PSI_FILE_CALL(get_thread_file_name_locker) + (&state, key, PSI_FILE_OPEN, filename, &locker); if (likely(locker != NULL)) { - PSI_CALL(start_file_open_wait)(locker, src_file, src_line); + PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line); file= my_open(filename, flags, myFlags); - PSI_CALL(end_file_open_wait_and_bind_to_descriptor)(locker, file); + PSI_FILE_CALL(end_file_open_wait_and_bind_to_descriptor)(locker, file); return file; } #endif @@ -1066,13 +1065,13 @@ inline_mysql_file_close( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_descriptor_locker)(&state, file, - PSI_FILE_CLOSE); + locker= PSI_FILE_CALL(get_thread_file_descriptor_locker) + (&state, file, PSI_FILE_CLOSE); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + PSI_FILE_CALL(start_file_close_wait)(locker, src_file, src_line); result= my_close(file, flags); - PSI_CALL(end_file_wait)(locker, (size_t) 0); + PSI_FILE_CALL(end_file_close_wait)(locker, result); return result; } #endif @@ -1093,17 +1092,17 @@ inline_mysql_file_read( struct PSI_file_locker *locker; PSI_file_locker_state state; size_t bytes_read; - locker= PSI_CALL(get_thread_file_descriptor_locker)(&state, file, - PSI_FILE_READ); + locker= PSI_FILE_CALL(get_thread_file_descriptor_locker) + (&state, file, PSI_FILE_READ); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, count, src_file, src_line); + PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line); result= my_read(file, buffer, count, flags); if (flags & (MY_NABP | MY_FNABP)) bytes_read= (result == 0) ? count : 0; else bytes_read= (result != MY_FILE_ERROR) ? result : 0; - PSI_CALL(end_file_wait)(locker, bytes_read); + PSI_FILE_CALL(end_file_wait)(locker, bytes_read); return result; } #endif @@ -1124,17 +1123,17 @@ inline_mysql_file_write( struct PSI_file_locker *locker; PSI_file_locker_state state; size_t bytes_written; - locker= PSI_CALL(get_thread_file_descriptor_locker)(&state, file, - PSI_FILE_WRITE); + locker= PSI_FILE_CALL(get_thread_file_descriptor_locker) + (&state, file, PSI_FILE_WRITE); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, count, src_file, src_line); + PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line); result= my_write(file, buffer, count, flags); if (flags & (MY_NABP | MY_FNABP)) bytes_written= (result == 0) ? count : 0; else bytes_written= (result != MY_FILE_ERROR) ? result : 0; - PSI_CALL(end_file_wait)(locker, bytes_written); + PSI_FILE_CALL(end_file_wait)(locker, bytes_written); return result; } #endif @@ -1155,16 +1154,17 @@ inline_mysql_file_pread( struct PSI_file_locker *locker; PSI_file_locker_state state; size_t bytes_read; - locker= PSI_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_READ); + locker= PSI_FILE_CALL(get_thread_file_descriptor_locker) + (&state, file, PSI_FILE_READ); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, count, src_file, src_line); + PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line); result= my_pread(file, buffer, count, offset, flags); if (flags & (MY_NABP | MY_FNABP)) bytes_read= (result == 0) ? count : 0; else bytes_read= (result != MY_FILE_ERROR) ? result : 0; - PSI_CALL(end_file_wait)(locker, bytes_read); + PSI_FILE_CALL(end_file_wait)(locker, bytes_read); return result; } #endif @@ -1185,17 +1185,17 @@ inline_mysql_file_pwrite( struct PSI_file_locker *locker; PSI_file_locker_state state; size_t bytes_written; - locker= PSI_CALL(get_thread_file_descriptor_locker)(&state, file, - PSI_FILE_WRITE); + locker= PSI_FILE_CALL(get_thread_file_descriptor_locker) + (&state, file, PSI_FILE_WRITE); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, count, src_file, src_line); + PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line); result= my_pwrite(file, buffer, count, offset, flags); if (flags & (MY_NABP | MY_FNABP)) bytes_written= (result == 0) ? count : 0; else bytes_written= (result != MY_FILE_ERROR) ? result : 0; - PSI_CALL(end_file_wait)(locker, bytes_written); + PSI_FILE_CALL(end_file_wait)(locker, bytes_written); return result; } #endif @@ -1215,12 +1215,13 @@ inline_mysql_file_seek( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_SEEK); + locker= PSI_FILE_CALL(get_thread_file_descriptor_locker) + (&state, file, PSI_FILE_SEEK); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); result= my_seek(file, pos, whence, flags); - PSI_CALL(end_file_wait)(locker, (size_t) 0); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); return result; } #endif @@ -1240,12 +1241,13 @@ inline_mysql_file_tell( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_TELL); + locker= PSI_FILE_CALL(get_thread_file_descriptor_locker) + (&state, file, PSI_FILE_TELL); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); result= my_tell(file, flags); - PSI_CALL(end_file_wait)(locker, (size_t) 0); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); return result; } #endif @@ -1265,13 +1267,13 @@ inline_mysql_file_delete( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_DELETE, - name, &locker); + locker= PSI_FILE_CALL(get_thread_file_name_locker) + (&state, key, PSI_FILE_DELETE, name, &locker); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + PSI_FILE_CALL(start_file_close_wait)(locker, src_file, src_line); result= my_delete(name, flags); - PSI_CALL(end_file_wait)(locker, (size_t) 0); + PSI_FILE_CALL(end_file_close_wait)(locker, result); return result; } #endif @@ -1291,13 +1293,13 @@ inline_mysql_file_rename( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_RENAME, - to, &locker); + locker= PSI_FILE_CALL(get_thread_file_name_locker) + (&state, key, PSI_FILE_RENAME, to, &locker); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); result= my_rename(from, to, flags); - PSI_CALL(end_file_wait)(locker, (size_t) 0); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); return result; } #endif @@ -1318,14 +1320,14 @@ inline_mysql_file_create_with_symlink( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_CREATE, - filename, &locker); + locker= PSI_FILE_CALL(get_thread_file_name_locker) + (&state, key, PSI_FILE_CREATE, filename, &locker); if (likely(locker != NULL)) { - PSI_CALL(start_file_open_wait)(locker, src_file, src_line); + PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line); file= my_create_with_symlink(linkname, filename, create_flags, access_flags, flags); - PSI_CALL(end_file_open_wait_and_bind_to_descriptor)(locker, file); + PSI_FILE_CALL(end_file_open_wait_and_bind_to_descriptor)(locker, file); return file; } #endif @@ -1346,13 +1348,13 @@ inline_mysql_file_delete_with_symlink( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_DELETE, - name, &locker); + locker= PSI_FILE_CALL(get_thread_file_name_locker) + (&state, key, PSI_FILE_DELETE, name, &locker); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + PSI_FILE_CALL(start_file_close_wait)(locker, src_file, src_line); result= my_delete_with_symlink(name, flags); - PSI_CALL(end_file_wait)(locker, (size_t) 0); + PSI_FILE_CALL(end_file_close_wait)(locker, result); return result; } #endif @@ -1372,13 +1374,13 @@ inline_mysql_file_rename_with_symlink( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_RENAME, - to, &locker); + locker= PSI_FILE_CALL(get_thread_file_name_locker) + (&state, key, PSI_FILE_RENAME, to, &locker); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); result= my_rename_with_symlink(from, to, flags); - PSI_CALL(end_file_wait)(locker, (size_t) 0); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); return result; } #endif @@ -1398,12 +1400,13 @@ inline_mysql_file_sync( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; - locker= PSI_CALL(get_thread_file_descriptor_locker)(&state, fd, PSI_FILE_SYNC); + locker= PSI_FILE_CALL(get_thread_file_descriptor_locker) + (&state, fd, PSI_FILE_SYNC); if (likely(locker != NULL)) { - PSI_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); + PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); result= my_sync(fd, flags); - PSI_CALL(end_file_wait)(locker, (size_t) 0); + PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); return result; } #endif diff --git a/include/mysql/psi/mysql_idle.h b/include/mysql/psi/mysql_idle.h index 7a3fccfdb8c..c53d0ceb8c7 100644 --- a/include/mysql/psi/mysql_idle.h +++ b/include/mysql/psi/mysql_idle.h @@ -70,7 +70,7 @@ inline_mysql_start_idle_wait(PSI_idle_locker_state *state, const char *src_file, int src_line) { struct PSI_idle_locker *locker; - locker= PSI_CALL(start_idle_wait)(state, src_file, src_line); + locker= PSI_IDLE_CALL(start_idle_wait)(state, src_file, src_line); return locker; } @@ -82,7 +82,7 @@ static inline void inline_mysql_end_idle_wait(struct PSI_idle_locker *locker) { if (likely(locker != NULL)) - PSI_CALL(end_idle_wait)(locker); + PSI_IDLE_CALL(end_idle_wait)(locker); } #endif diff --git a/include/mysql/psi/mysql_socket.h b/include/mysql/psi/mysql_socket.h index c908032883a..e1d56539f85 100644 --- a/include/mysql/psi/mysql_socket.h +++ b/include/mysql/psi/mysql_socket.h @@ -29,6 +29,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA #ifdef __WIN__ #include <ws2def.h> #include <winsock2.h> + #include <MSWSock.h> #define SOCKBUF_T char #else #include <netinet/in.h> @@ -121,7 +122,7 @@ mysql_socket_set_address( { #ifdef HAVE_PSI_SOCKET_INTERFACE if (socket.m_psi != NULL) - PSI_CALL(set_socket_info)(socket.m_psi, NULL, addr, addr_len); + PSI_SOCKET_CALL(set_socket_info)(socket.m_psi, NULL, addr, addr_len); #endif } @@ -141,7 +142,7 @@ MYSQL_SOCKET socket __attribute__ ((unused)) { #ifdef HAVE_PSI_SOCKET_INTERFACE if (socket.m_psi != NULL) - PSI_CALL(set_socket_thread_owner)(socket.m_psi); + PSI_SOCKET_CALL(set_socket_thread_owner)(socket.m_psi); #endif } @@ -247,8 +248,8 @@ inline_mysql_start_socket_wait(PSI_socket_locker_state *state, struct PSI_socket_locker *locker; if (mysql_socket.m_psi != NULL) { - locker= PSI_CALL(start_socket_wait)(state, mysql_socket.m_psi, op, - byte_count, src_file, src_line); + locker= PSI_SOCKET_CALL(start_socket_wait) + (state, mysql_socket.m_psi, op, byte_count, src_file, src_line); } else locker= NULL; @@ -263,7 +264,7 @@ static inline void inline_mysql_end_socket_wait(struct PSI_socket_locker *locker, size_t byte_count) { if (locker != NULL) - PSI_CALL(end_socket_wait)(locker, byte_count); + PSI_SOCKET_CALL(end_socket_wait)(locker, byte_count); } /** @@ -276,7 +277,7 @@ static inline void inline_mysql_socket_set_state(MYSQL_SOCKET socket, enum PSI_socket_state state) { if (socket.m_psi != NULL) - PSI_CALL(set_socket_state)(socket.m_psi, state); + PSI_SOCKET_CALL(set_socket_state)(socket.m_psi, state); } #endif /* HAVE_PSI_SOCKET_INTERFACE */ @@ -537,7 +538,7 @@ static inline void inline_mysql_socket_register( PSI_socket_info *info, int count) { - PSI_CALL(register_socket)(category, info, count); + PSI_SOCKET_CALL(register_socket)(category, info, count); } #endif @@ -551,16 +552,15 @@ inline_mysql_socket_socket #endif int domain, int type, int protocol) { - MYSQL_SOCKET mysql_socket; + MYSQL_SOCKET mysql_socket= MYSQL_INVALID_SOCKET; mysql_socket.fd= socket(domain, type, protocol); #ifdef HAVE_PSI_SOCKET_INTERFACE - mysql_socket.m_psi= PSI_CALL(init_socket)(key, (const my_socket*)&mysql_socket.fd); - - if (likely(mysql_socket.fd != INVALID_SOCKET && mysql_socket.m_psi != NULL)) - PSI_CALL(set_socket_info)(mysql_socket.m_psi, &mysql_socket.fd, NULL, 0); -#else - mysql_socket.m_psi= NULL; + if (likely(mysql_socket.fd != INVALID_SOCKET)) + { + mysql_socket.m_psi= PSI_SOCKET_CALL(init_socket) + (key, (const my_socket*)&mysql_socket.fd, NULL, 0); + } #endif return mysql_socket; } @@ -583,17 +583,18 @@ inline_mysql_socket_bind /* Instrumentation start */ PSI_socket_locker_state state; PSI_socket_locker *locker; - locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi, - PSI_SOCKET_BIND, (size_t)0, src_file, src_line); + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_BIND, (size_t)0, src_file, src_line); /* Instrumented code */ result= bind(mysql_socket.fd, addr, len); /* Instrumentation end */ - PSI_CALL(set_socket_info)(mysql_socket.m_psi, NULL, addr, len); + if (result == 0) + PSI_SOCKET_CALL(set_socket_info)(mysql_socket.m_psi, NULL, addr, len); if (locker != NULL) - PSI_CALL(end_socket_wait)(locker, (size_t)0); + PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); return result; } @@ -622,15 +623,15 @@ inline_mysql_socket_getsockname /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; - locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi, - PSI_SOCKET_BIND, (size_t)0, src_file, src_line); + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_BIND, (size_t)0, src_file, src_line); /* Instrumented code */ result= getsockname(mysql_socket.fd, addr, len); /* Instrumentation end */ if (locker != NULL) - PSI_CALL(end_socket_wait)(locker, (size_t)0); + PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); return result; } @@ -660,15 +661,15 @@ inline_mysql_socket_connect /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; - locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi, - PSI_SOCKET_CONNECT, (size_t)0, src_file, src_line); + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_CONNECT, (size_t)0, src_file, src_line); /* Instrumented code */ result= connect(mysql_socket.fd, addr, len); /* Instrumentation end */ if (locker != NULL) - PSI_CALL(end_socket_wait)(locker, (size_t)0); + PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); return result; } @@ -698,15 +699,15 @@ inline_mysql_socket_getpeername /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; - locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi, - PSI_SOCKET_BIND, (size_t)0, src_file, src_line); + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_BIND, (size_t)0, src_file, src_line); /* Instrumented code */ result= getpeername(mysql_socket.fd, addr, len); /* Instrumentation end */ if (locker != NULL) - PSI_CALL(end_socket_wait)(locker, (size_t)0); + PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); return result; } @@ -736,18 +737,18 @@ inline_mysql_socket_send /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; - locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi, - PSI_SOCKET_SEND, n, src_file, src_line); + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_SEND, n, src_file, src_line); /* Instrumented code */ - result= send(mysql_socket.fd, buf, n, flags); + result= send(mysql_socket.fd, buf, IF_WIN((int),) n, flags); /* Instrumentation end */ if (locker != NULL) { size_t bytes_written; bytes_written= (result > -1) ? result : 0; - PSI_CALL(end_socket_wait)(locker, bytes_written); + PSI_SOCKET_CALL(end_socket_wait)(locker, bytes_written); } return result; @@ -755,7 +756,7 @@ inline_mysql_socket_send #endif /* Non instrumented code */ - result= send(mysql_socket.fd, buf, n, flags); + result= send(mysql_socket.fd, buf, IF_WIN((int),) n, flags); return result; } @@ -778,18 +779,18 @@ inline_mysql_socket_recv /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; - locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi, - PSI_SOCKET_RECV, (size_t)0, src_file, src_line); + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_RECV, (size_t)0, src_file, src_line); /* Instrumented code */ - result= recv(mysql_socket.fd, buf, n, flags); + result= recv(mysql_socket.fd, buf, IF_WIN((int),) n, flags); /* Instrumentation end */ if (locker != NULL) { size_t bytes_read; bytes_read= (result > -1) ? result : 0; - PSI_CALL(end_socket_wait)(locker, bytes_read); + PSI_SOCKET_CALL(end_socket_wait)(locker, bytes_read); } return result; @@ -797,7 +798,7 @@ inline_mysql_socket_recv #endif /* Non instrumented code */ - result= recv(mysql_socket.fd, buf, n, flags); + result= recv(mysql_socket.fd, buf, IF_WIN((int),) n, flags); return result; } @@ -820,18 +821,18 @@ inline_mysql_socket_sendto /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; - locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi, - PSI_SOCKET_SEND, n, src_file, src_line); + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_SEND, n, src_file, src_line); /* Instrumented code */ - result= sendto(mysql_socket.fd, buf, n, flags, addr, addr_len); + result= sendto(mysql_socket.fd, buf, IF_WIN((int),) n, flags, addr, addr_len); /* Instrumentation end */ if (locker != NULL) { size_t bytes_written; bytes_written = (result > -1) ? result : 0; - PSI_CALL(end_socket_wait)(locker, bytes_written); + PSI_SOCKET_CALL(end_socket_wait)(locker, bytes_written); } return result; @@ -839,7 +840,7 @@ inline_mysql_socket_sendto #endif /* Non instrumented code */ - result= sendto(mysql_socket.fd, buf, n, flags, addr, addr_len); + result= sendto(mysql_socket.fd, buf, IF_WIN((int),) n, flags, addr, addr_len); return result; } @@ -863,18 +864,18 @@ inline_mysql_socket_recvfrom /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; - locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi, - PSI_SOCKET_RECV, (size_t)0, src_file, src_line); + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_RECV, (size_t)0, src_file, src_line); /* Instrumented code */ - result= recvfrom(mysql_socket.fd, buf, n, flags, addr, addr_len); + result= recvfrom(mysql_socket.fd, buf, IF_WIN((int),) n, flags, addr, addr_len); /* Instrumentation end */ if (locker != NULL) { size_t bytes_read; bytes_read = (result > -1) ? result : 0; - PSI_CALL(end_socket_wait)(locker, bytes_read); + PSI_SOCKET_CALL(end_socket_wait)(locker, bytes_read); } return result; @@ -882,7 +883,7 @@ inline_mysql_socket_recvfrom #endif /* Non instrumented code */ - result= recvfrom(mysql_socket.fd, buf, n, flags, addr, addr_len); + result= recvfrom(mysql_socket.fd, buf, IF_WIN((int),) n, flags, addr, addr_len); return result; } @@ -905,15 +906,15 @@ inline_mysql_socket_getsockopt /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; - locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi, - PSI_SOCKET_OPT, (size_t)0, src_file, src_line); + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_OPT, (size_t)0, src_file, src_line); /* Instrumented code */ result= getsockopt(mysql_socket.fd, level, optname, optval, optlen); /* Instrumentation end */ if (locker != NULL) - PSI_CALL(end_socket_wait)(locker, (size_t)0); + PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); return result; } @@ -944,15 +945,15 @@ inline_mysql_socket_setsockopt /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; - locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi, - PSI_SOCKET_OPT, (size_t)0, src_file, src_line); + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_OPT, (size_t)0, src_file, src_line); /* Instrumented code */ result= setsockopt(mysql_socket.fd, level, optname, optval, optlen); /* Instrumentation end */ if (locker != NULL) - PSI_CALL(end_socket_wait)(locker, (size_t)0); + PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); return result; } @@ -982,15 +983,15 @@ inline_mysql_socket_listen /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; - locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi, - PSI_SOCKET_CONNECT, (size_t)0, src_file, src_line); + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_CONNECT, (size_t)0, src_file, src_line); /* Instrumented code */ result= listen(mysql_socket.fd, backlog); /* Instrumentation end */ if (locker != NULL) - PSI_CALL(end_socket_wait)(locker, (size_t)0); + PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); return result; } @@ -1021,15 +1022,15 @@ inline_mysql_socket_accept /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; - locker= PSI_CALL(start_socket_wait)(&state, socket_listen.m_psi, - PSI_SOCKET_CONNECT, (size_t)0, src_file, src_line); + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, socket_listen.m_psi, PSI_SOCKET_CONNECT, (size_t)0, src_file, src_line); /* Instrumented code */ socket_accept.fd= accept(socket_listen.fd, addr, &addr_length); /* Instrumentation end */ if (locker != NULL) - PSI_CALL(end_socket_wait)(locker, (size_t)0); + PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); } else #endif @@ -1039,14 +1040,12 @@ inline_mysql_socket_accept } #ifdef HAVE_PSI_SOCKET_INTERFACE - /* Initialize the instrument with the new socket descriptor and address */ - socket_accept.m_psi= - PSI_CALL(init_socket)(key, (const my_socket*)&socket_accept.fd); - - /* FIXME: simplify this with just 1 call to init_socket(). */ - if (socket_accept.m_psi != NULL) - PSI_CALL(set_socket_info)(socket_accept.m_psi, &socket_accept.fd, addr, - addr_length); + if (likely(socket_accept.fd != INVALID_SOCKET)) + { + /* Initialize the instrument with the new socket descriptor and address */ + socket_accept.m_psi= PSI_SOCKET_CALL(init_socket) + (key, (const my_socket*)&socket_accept.fd, addr, addr_length); + } #endif return socket_accept; @@ -1070,18 +1069,18 @@ inline_mysql_socket_close /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; - locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi, - PSI_SOCKET_CLOSE, (size_t)0, src_file, src_line); + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_CLOSE, (size_t)0, src_file, src_line); /* Instrumented code */ result= closesocket(mysql_socket.fd); /* Instrumentation end */ if (locker != NULL) - PSI_CALL(end_socket_wait)(locker, (size_t)0); + PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); /* Remove the instrumentation for this socket. */ if (mysql_socket.m_psi != NULL) - PSI_CALL(destroy_socket)(mysql_socket.m_psi); + PSI_SOCKET_CALL(destroy_socket)(mysql_socket.m_psi); return result; } @@ -1105,28 +1104,53 @@ inline_mysql_socket_shutdown { int result; - /* Instrumentation start */ +#ifdef __WIN__ + static LPFN_DISCONNECTEX DisconnectEx = NULL; + if (DisconnectEx == NULL) + { + DWORD dwBytesReturned; + GUID guidDisconnectEx = WSAID_DISCONNECTEX; + WSAIoctl(mysql_socket.fd, SIO_GET_EXTENSION_FUNCTION_POINTER, + &guidDisconnectEx, sizeof(GUID), + &DisconnectEx, sizeof(DisconnectEx), + &dwBytesReturned, NULL, NULL); + } +#endif + +/* Instrumentation start */ #ifdef HAVE_PSI_SOCKET_INTERFACE if (mysql_socket.m_psi != NULL) { PSI_socket_locker *locker; PSI_socket_locker_state state; - locker= PSI_CALL(start_socket_wait)(&state, mysql_socket.m_psi, - PSI_SOCKET_SHUTDOWN, (size_t)0, src_file, src_line); + locker= PSI_SOCKET_CALL(start_socket_wait) + (&state, mysql_socket.m_psi, PSI_SOCKET_SHUTDOWN, (size_t)0, src_file, src_line); /* Instrumented code */ - result= shutdown(mysql_socket.fd, how); +#ifdef __WIN__ + if (DisconnectEx) + result= (DisconnectEx(mysql_socket.fd, (LPOVERLAPPED) NULL, + (DWORD) 0, (DWORD) 0) == TRUE) ? 0 : -1; + else +#endif + result= shutdown(mysql_socket.fd, how); /* Instrumentation end */ if (locker != NULL) - PSI_CALL(end_socket_wait)(locker, (size_t)0); + PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); return result; } #endif /* Non instrumented code */ - result= shutdown(mysql_socket.fd, how); +#ifdef __WIN__ + if (DisconnectEx) + result= (DisconnectEx(mysql_socket.fd, (LPOVERLAPPED) NULL, + (DWORD) 0, (DWORD) 0) == TRUE) ? 0 : -1; + else +#endif + result= shutdown(mysql_socket.fd, how); return result; } diff --git a/include/mysql/psi/mysql_stage.h b/include/mysql/psi/mysql_stage.h index dc44e9b0bed..61bfdbb7d59 100644 --- a/include/mysql/psi/mysql_stage.h +++ b/include/mysql/psi/mysql_stage.h @@ -53,7 +53,7 @@ static inline void inline_mysql_stage_register( const char *category, PSI_stage_info **info, int count) { - PSI_CALL(register_stage)(category, info, count); + PSI_STAGE_CALL(register_stage)(category, info, count); } #endif @@ -62,7 +62,7 @@ static inline void inline_mysql_set_stage(PSI_stage_key key, const char *src_file, int src_line) { - PSI_CALL(start_stage)(key, src_file, src_line); + PSI_STAGE_CALL(start_stage)(key, src_file, src_line); } #endif diff --git a/include/mysql/psi/mysql_statement.h b/include/mysql/psi/mysql_statement.h index 1b065065e57..d7a76ee25e4 100644 --- a/include/mysql/psi/mysql_statement.h +++ b/include/mysql/psi/mysql_statement.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -63,10 +63,10 @@ #endif #ifdef HAVE_PSI_STATEMENT_INTERFACE - #define MYSQL_START_STATEMENT(STATE, K, DB, DB_LEN) \ - inline_mysql_start_statement(STATE, K, DB, DB_LEN, __FILE__, __LINE__) + #define MYSQL_START_STATEMENT(STATE, K, DB, DB_LEN, CS) \ + inline_mysql_start_statement(STATE, K, DB, DB_LEN, CS, __FILE__, __LINE__) #else - #define MYSQL_START_STATEMENT(STATE, K, DB, DB_LEN) \ + #define MYSQL_START_STATEMENT(STATE, K, DB, DB_LEN, CS) \ NULL #endif @@ -122,7 +122,7 @@ static inline void inline_mysql_statement_register( const char *category, PSI_statement_info *info, int count) { - PSI_CALL(register_statement)(category, info, count); + PSI_STATEMENT_CALL(register_statement)(category, info, count); } #ifdef HAVE_PSI_STATEMENT_DIGEST_INTERFACE @@ -132,7 +132,7 @@ inline_mysql_digest_start(PSI_statement_locker *locker) PSI_digest_locker* digest_locker= NULL; if (likely(locker != NULL)) - digest_locker= PSI_CALL(digest_start)(locker); + digest_locker= PSI_STATEMENT_CALL(digest_start)(locker); return digest_locker; } #endif @@ -143,7 +143,7 @@ inline_mysql_add_token(PSI_digest_locker *locker, uint token, void *yylval) { if (likely(locker != NULL)) - locker= PSI_CALL(digest_add_token)(locker, token, + locker= PSI_STATEMENT_CALL(digest_add_token)(locker, token, (OPAQUE_LEX_YYSTYPE*)yylval); return locker; } @@ -153,12 +153,13 @@ static inline struct PSI_statement_locker * inline_mysql_start_statement(PSI_statement_locker_state *state, PSI_statement_key key, const char *db, uint db_len, + const CHARSET_INFO *charset, const char *src_file, int src_line) { PSI_statement_locker *locker; - locker= PSI_CALL(get_thread_statement_locker)(state, key); + locker= PSI_STATEMENT_CALL(get_thread_statement_locker)(state, key, charset); if (likely(locker != NULL)) - PSI_CALL(start_statement)(locker, db, db_len, src_file, src_line); + PSI_STATEMENT_CALL(start_statement)(locker, db, db_len, src_file, src_line); return locker; } @@ -168,7 +169,7 @@ inline_mysql_refine_statement(PSI_statement_locker *locker, { if (likely(locker != NULL)) { - locker= PSI_CALL(refine_statement)(locker, key); + locker= PSI_STATEMENT_CALL(refine_statement)(locker, key); } return locker; } @@ -179,7 +180,7 @@ inline_mysql_set_statement_text(PSI_statement_locker *locker, { if (likely(locker != NULL)) { - PSI_CALL(set_statement_text)(locker, text, text_len); + PSI_STATEMENT_CALL(set_statement_text)(locker, text, text_len); } } @@ -189,7 +190,7 @@ inline_mysql_set_statement_lock_time(PSI_statement_locker *locker, { if (likely(locker != NULL)) { - PSI_CALL(set_statement_lock_time)(locker, count); + PSI_STATEMENT_CALL(set_statement_lock_time)(locker, count); } } @@ -199,7 +200,7 @@ inline_mysql_set_statement_rows_sent(PSI_statement_locker *locker, { if (likely(locker != NULL)) { - PSI_CALL(set_statement_rows_sent)(locker, count); + PSI_STATEMENT_CALL(set_statement_rows_sent)(locker, count); } } @@ -209,7 +210,7 @@ inline_mysql_set_statement_rows_examined(PSI_statement_locker *locker, { if (likely(locker != NULL)) { - PSI_CALL(set_statement_rows_examined)(locker, count); + PSI_STATEMENT_CALL(set_statement_rows_examined)(locker, count); } } @@ -217,9 +218,9 @@ static inline void inline_mysql_end_statement(struct PSI_statement_locker *locker, Diagnostics_area *stmt_da) { - PSI_CALL(end_stage)(); + PSI_STAGE_CALL(end_stage)(); if (likely(locker != NULL)) - PSI_CALL(end_statement)(locker, stmt_da); + PSI_STATEMENT_CALL(end_statement)(locker, stmt_da); } #endif diff --git a/include/mysql/psi/mysql_table.h b/include/mysql/psi/mysql_table.h index 1796943096e..815313e654b 100644 --- a/include/mysql/psi/mysql_table.h +++ b/include/mysql/psi/mysql_table.h @@ -60,22 +60,22 @@ @sa MYSQL_END_TABLE_WAIT. */ #ifdef HAVE_PSI_TABLE_INTERFACE - #define MYSQL_TABLE_IO_WAIT(PSI, OP, INDEX, FLAGS, PAYLOAD) \ - { \ - if (PSI != NULL) \ - { \ - PSI_table_locker *locker; \ - PSI_table_locker_state state; \ - locker= PSI_CALL(start_table_io_wait)(& state, PSI, OP, INDEX, \ - __FILE__, __LINE__); \ - PAYLOAD \ - if (locker != NULL) \ - PSI_CALL(end_table_io_wait)(locker); \ - } \ - else \ - { \ - PAYLOAD \ - } \ + #define MYSQL_TABLE_IO_WAIT(PSI, OP, INDEX, FLAGS, PAYLOAD) \ + { \ + if (PSI != NULL) \ + { \ + PSI_table_locker *locker; \ + PSI_table_locker_state state; \ + locker= PSI_TABLE_CALL(start_table_io_wait) \ + (& state, PSI, OP, INDEX, __FILE__, __LINE__); \ + PAYLOAD \ + if (locker != NULL) \ + PSI_TABLE_CALL(end_table_io_wait)(locker); \ + } \ + else \ + { \ + PAYLOAD \ + } \ } #else #define MYSQL_TABLE_IO_WAIT(PSI, OP, INDEX, FLAGS, PAYLOAD) \ @@ -93,22 +93,22 @@ @sa MYSQL_END_TABLE_WAIT. */ #ifdef HAVE_PSI_TABLE_INTERFACE - #define MYSQL_TABLE_LOCK_WAIT(PSI, OP, FLAGS, PAYLOAD) \ - { \ - if (PSI != NULL) \ - { \ - PSI_table_locker *locker; \ - PSI_table_locker_state state; \ - locker= PSI_CALL(start_table_lock_wait)(& state, PSI, OP, FLAGS, \ - __FILE__, __LINE__); \ - PAYLOAD \ - if (locker != NULL) \ - PSI_CALL(end_table_lock_wait)(locker); \ - } \ - else \ - { \ - PAYLOAD \ - } \ + #define MYSQL_TABLE_LOCK_WAIT(PSI, OP, FLAGS, PAYLOAD) \ + { \ + if (PSI != NULL) \ + { \ + PSI_table_locker *locker; \ + PSI_table_locker_state state; \ + locker= PSI_TABLE_CALL(start_table_lock_wait) \ + (& state, PSI, OP, FLAGS, __FILE__, __LINE__); \ + PAYLOAD \ + if (locker != NULL) \ + PSI_TABLE_CALL(end_table_lock_wait)(locker); \ + } \ + else \ + { \ + PAYLOAD \ + } \ } #else #define MYSQL_TABLE_LOCK_WAIT(PSI, OP, FLAGS, PAYLOAD) \ @@ -164,7 +164,8 @@ inline_mysql_start_table_lock_wait(PSI_table_locker_state *state, if (psi != NULL) { struct PSI_table_locker *locker; - locker= PSI_CALL(start_table_lock_wait)(state, psi, op, flags, src_file, src_line); + locker= PSI_TABLE_CALL(start_table_lock_wait) + (state, psi, op, flags, src_file, src_line); return locker; } return NULL; @@ -178,7 +179,7 @@ static inline void inline_mysql_end_table_lock_wait(struct PSI_table_locker *locker) { if (locker != NULL) - PSI_CALL(end_table_lock_wait)(locker); + PSI_TABLE_CALL(end_table_lock_wait)(locker); } #endif diff --git a/include/mysql/psi/mysql_thread.h b/include/mysql/psi/mysql_thread.h index 78175196fa2..f0d88ff8ede 100644 --- a/include/mysql/psi/mysql_thread.h +++ b/include/mysql/psi/mysql_thread.h @@ -597,7 +597,7 @@ static inline void inline_mysql_mutex_register( ) { #ifdef HAVE_PSI_MUTEX_INTERFACE - PSI_CALL(register_mutex)(category, info, count); + PSI_MUTEX_CALL(register_mutex)(category, info, count); #endif } @@ -613,7 +613,7 @@ static inline int inline_mysql_mutex_init( ) { #ifdef HAVE_PSI_MUTEX_INTERFACE - that->m_psi= PSI_CALL(init_mutex)(key, &that->m_mutex); + that->m_psi= PSI_MUTEX_CALL(init_mutex)(key, &that->m_mutex); #else that->m_psi= NULL; #endif @@ -636,7 +636,7 @@ static inline int inline_mysql_mutex_destroy( #ifdef HAVE_PSI_MUTEX_INTERFACE if (that->m_psi != NULL) { - PSI_CALL(destroy_mutex)(that->m_psi); + PSI_MUTEX_CALL(destroy_mutex)(that->m_psi); that->m_psi= NULL; } #endif @@ -664,7 +664,7 @@ static inline int inline_mysql_mutex_lock( /* Instrumentation start */ PSI_mutex_locker *locker; PSI_mutex_locker_state state; - locker= PSI_CALL(start_mutex_wait)(&state, that->m_psi, + locker= PSI_MUTEX_CALL(start_mutex_wait)(&state, that->m_psi, PSI_MUTEX_LOCK, src_file, src_line); /* Instrumented code */ @@ -678,7 +678,7 @@ static inline int inline_mysql_mutex_lock( /* Instrumentation end */ if (locker != NULL) - PSI_CALL(end_mutex_wait)(locker, result); + PSI_MUTEX_CALL(end_mutex_wait)(locker, result); return result; } @@ -711,7 +711,7 @@ static inline int inline_mysql_mutex_trylock( /* Instrumentation start */ PSI_mutex_locker *locker; PSI_mutex_locker_state state; - locker= PSI_CALL(start_mutex_wait)(&state, that->m_psi, + locker= PSI_MUTEX_CALL(start_mutex_wait)(&state, that->m_psi, PSI_MUTEX_TRYLOCK, src_file, src_line); /* Instrumented code */ @@ -725,7 +725,7 @@ static inline int inline_mysql_mutex_trylock( /* Instrumentation end */ if (locker != NULL) - PSI_CALL(end_mutex_wait)(locker, result); + PSI_MUTEX_CALL(end_mutex_wait)(locker, result); return result; } @@ -754,7 +754,7 @@ static inline int inline_mysql_mutex_unlock( #ifdef HAVE_PSI_MUTEX_INTERFACE if (that->m_psi != NULL) - PSI_CALL(unlock_mutex)(that->m_psi); + PSI_MUTEX_CALL(unlock_mutex)(that->m_psi); #endif #ifdef SAFE_MUTEX @@ -781,7 +781,7 @@ static inline void inline_mysql_rwlock_register( ) { #ifdef HAVE_PSI_RWLOCK_INTERFACE - PSI_CALL(register_rwlock)(category, info, count); + PSI_RWLOCK_CALL(register_rwlock)(category, info, count); #endif } @@ -792,7 +792,7 @@ static inline int inline_mysql_rwlock_init( mysql_rwlock_t *that) { #ifdef HAVE_PSI_RWLOCK_INTERFACE - that->m_psi= PSI_CALL(init_rwlock)(key, &that->m_rwlock); + that->m_psi= PSI_RWLOCK_CALL(init_rwlock)(key, &that->m_rwlock); #else that->m_psi= NULL; #endif @@ -810,7 +810,7 @@ static inline int inline_mysql_prlock_init( mysql_prlock_t *that) { #ifdef HAVE_PSI_RWLOCK_INTERFACE - that->m_psi= PSI_CALL(init_rwlock)(key, &that->m_prlock); + that->m_psi= PSI_RWLOCK_CALL(init_rwlock)(key, &that->m_prlock); #else that->m_psi= NULL; #endif @@ -824,7 +824,7 @@ static inline int inline_mysql_rwlock_destroy( #ifdef HAVE_PSI_RWLOCK_INTERFACE if (that->m_psi != NULL) { - PSI_CALL(destroy_rwlock)(that->m_psi); + PSI_RWLOCK_CALL(destroy_rwlock)(that->m_psi); that->m_psi= NULL; } #endif @@ -838,7 +838,7 @@ static inline int inline_mysql_prlock_destroy( #ifdef HAVE_PSI_RWLOCK_INTERFACE if (that->m_psi != NULL) { - PSI_CALL(destroy_rwlock)(that->m_psi); + PSI_RWLOCK_CALL(destroy_rwlock)(that->m_psi); that->m_psi= NULL; } #endif @@ -861,7 +861,7 @@ static inline int inline_mysql_rwlock_rdlock( /* Instrumentation start */ PSI_rwlock_locker *locker; PSI_rwlock_locker_state state; - locker= PSI_CALL(start_rwlock_rdwait)(&state, that->m_psi, + locker= PSI_RWLOCK_CALL(start_rwlock_rdwait)(&state, that->m_psi, PSI_RWLOCK_READLOCK, src_file, src_line); /* Instrumented code */ @@ -869,7 +869,7 @@ static inline int inline_mysql_rwlock_rdlock( /* Instrumentation end */ if (locker != NULL) - PSI_CALL(end_rwlock_rdwait)(locker, result); + PSI_RWLOCK_CALL(end_rwlock_rdwait)(locker, result); return result; } @@ -897,7 +897,7 @@ static inline int inline_mysql_prlock_rdlock( /* Instrumentation start */ PSI_rwlock_locker *locker; PSI_rwlock_locker_state state; - locker= PSI_CALL(start_rwlock_rdwait)(&state, that->m_psi, + locker= PSI_RWLOCK_CALL(start_rwlock_rdwait)(&state, that->m_psi, PSI_RWLOCK_READLOCK, src_file, src_line); /* Instrumented code */ @@ -905,7 +905,7 @@ static inline int inline_mysql_prlock_rdlock( /* Instrumentation end */ if (locker != NULL) - PSI_CALL(end_rwlock_rdwait)(locker, result); + PSI_RWLOCK_CALL(end_rwlock_rdwait)(locker, result); return result; } @@ -933,7 +933,7 @@ static inline int inline_mysql_rwlock_wrlock( /* Instrumentation start */ PSI_rwlock_locker *locker; PSI_rwlock_locker_state state; - locker= PSI_CALL(start_rwlock_wrwait)(&state, that->m_psi, + locker= PSI_RWLOCK_CALL(start_rwlock_wrwait)(&state, that->m_psi, PSI_RWLOCK_WRITELOCK, src_file, src_line); /* Instrumented code */ @@ -941,7 +941,7 @@ static inline int inline_mysql_rwlock_wrlock( /* Instrumentation end */ if (locker != NULL) - PSI_CALL(end_rwlock_wrwait)(locker, result); + PSI_RWLOCK_CALL(end_rwlock_wrwait)(locker, result); return result; } @@ -969,7 +969,7 @@ static inline int inline_mysql_prlock_wrlock( /* Instrumentation start */ PSI_rwlock_locker *locker; PSI_rwlock_locker_state state; - locker= PSI_CALL(start_rwlock_wrwait)(&state, that->m_psi, + locker= PSI_RWLOCK_CALL(start_rwlock_wrwait)(&state, that->m_psi, PSI_RWLOCK_WRITELOCK, src_file, src_line); /* Instrumented code */ @@ -977,7 +977,7 @@ static inline int inline_mysql_prlock_wrlock( /* Instrumentation end */ if (locker != NULL) - PSI_CALL(end_rwlock_wrwait)(locker, result); + PSI_RWLOCK_CALL(end_rwlock_wrwait)(locker, result); return result; } @@ -1005,7 +1005,7 @@ static inline int inline_mysql_rwlock_tryrdlock( /* Instrumentation start */ PSI_rwlock_locker *locker; PSI_rwlock_locker_state state; - locker= PSI_CALL(start_rwlock_rdwait)(&state, that->m_psi, + locker= PSI_RWLOCK_CALL(start_rwlock_rdwait)(&state, that->m_psi, PSI_RWLOCK_TRYREADLOCK, src_file, src_line); /* Instrumented code */ @@ -1013,7 +1013,7 @@ static inline int inline_mysql_rwlock_tryrdlock( /* Instrumentation end */ if (locker != NULL) - PSI_CALL(end_rwlock_rdwait)(locker, result); + PSI_RWLOCK_CALL(end_rwlock_rdwait)(locker, result); return result; } @@ -1040,7 +1040,7 @@ static inline int inline_mysql_rwlock_trywrlock( /* Instrumentation start */ PSI_rwlock_locker *locker; PSI_rwlock_locker_state state; - locker= PSI_CALL(start_rwlock_wrwait)(&state, that->m_psi, + locker= PSI_RWLOCK_CALL(start_rwlock_wrwait)(&state, that->m_psi, PSI_RWLOCK_TRYWRITELOCK, src_file, src_line); /* Instrumented code */ @@ -1048,7 +1048,7 @@ static inline int inline_mysql_rwlock_trywrlock( /* Instrumentation end */ if (locker != NULL) - PSI_CALL(end_rwlock_wrwait)(locker, result); + PSI_RWLOCK_CALL(end_rwlock_wrwait)(locker, result); return result; } @@ -1066,7 +1066,7 @@ static inline int inline_mysql_rwlock_unlock( int result; #ifdef HAVE_PSI_RWLOCK_INTERFACE if (that->m_psi != NULL) - PSI_CALL(unlock_rwlock)(that->m_psi); + PSI_RWLOCK_CALL(unlock_rwlock)(that->m_psi); #endif result= rw_unlock(&that->m_rwlock); return result; @@ -1079,7 +1079,7 @@ static inline int inline_mysql_prlock_unlock( int result; #ifdef HAVE_PSI_RWLOCK_INTERFACE if (that->m_psi != NULL) - PSI_CALL(unlock_rwlock)(that->m_psi); + PSI_RWLOCK_CALL(unlock_rwlock)(that->m_psi); #endif result= rw_pr_unlock(&that->m_prlock); return result; @@ -1099,7 +1099,7 @@ static inline void inline_mysql_cond_register( ) { #ifdef HAVE_PSI_COND_INTERFACE - PSI_CALL(register_cond)(category, info, count); + PSI_COND_CALL(register_cond)(category, info, count); #endif } @@ -1111,7 +1111,7 @@ static inline int inline_mysql_cond_init( const pthread_condattr_t *attr) { #ifdef HAVE_PSI_COND_INTERFACE - that->m_psi= PSI_CALL(init_cond)(key, &that->m_cond); + that->m_psi= PSI_COND_CALL(init_cond)(key, &that->m_cond); #else that->m_psi= NULL; #endif @@ -1124,7 +1124,7 @@ static inline int inline_mysql_cond_destroy( #ifdef HAVE_PSI_COND_INTERFACE if (that->m_psi != NULL) { - PSI_CALL(destroy_cond)(that->m_psi); + PSI_COND_CALL(destroy_cond)(that->m_psi); that->m_psi= NULL; } #endif @@ -1147,7 +1147,7 @@ static inline int inline_mysql_cond_wait( /* Instrumentation start */ PSI_cond_locker *locker; PSI_cond_locker_state state; - locker= PSI_CALL(start_cond_wait)(&state, that->m_psi, mutex->m_psi, + locker= PSI_COND_CALL(start_cond_wait)(&state, that->m_psi, mutex->m_psi, PSI_COND_WAIT, src_file, src_line); /* Instrumented code */ @@ -1155,7 +1155,7 @@ static inline int inline_mysql_cond_wait( /* Instrumentation end */ if (locker != NULL) - PSI_CALL(end_cond_wait)(locker, result); + PSI_COND_CALL(end_cond_wait)(locker, result); return result; } @@ -1184,7 +1184,7 @@ static inline int inline_mysql_cond_timedwait( /* Instrumentation start */ PSI_cond_locker *locker; PSI_cond_locker_state state; - locker= PSI_CALL(start_cond_wait)(&state, that->m_psi, mutex->m_psi, + locker= PSI_COND_CALL(start_cond_wait)(&state, that->m_psi, mutex->m_psi, PSI_COND_TIMEDWAIT, src_file, src_line); /* Instrumented code */ @@ -1192,7 +1192,7 @@ static inline int inline_mysql_cond_timedwait( /* Instrumentation end */ if (locker != NULL) - PSI_CALL(end_cond_wait)(locker, result); + PSI_COND_CALL(end_cond_wait)(locker, result); return result; } @@ -1210,7 +1210,7 @@ static inline int inline_mysql_cond_signal( int result; #ifdef HAVE_PSI_COND_INTERFACE if (that->m_psi != NULL) - PSI_CALL(signal_cond)(that->m_psi); + PSI_COND_CALL(signal_cond)(that->m_psi); #endif result= pthread_cond_signal(&that->m_cond); return result; @@ -1222,7 +1222,7 @@ static inline int inline_mysql_cond_broadcast( int result; #ifdef HAVE_PSI_COND_INTERFACE if (that->m_psi != NULL) - PSI_CALL(broadcast_cond)(that->m_psi); + PSI_COND_CALL(broadcast_cond)(that->m_psi); #endif result= pthread_cond_broadcast(&that->m_cond); return result; @@ -1241,7 +1241,7 @@ static inline void inline_mysql_thread_register( ) { #ifdef HAVE_PSI_THREAD_INTERFACE - PSI_CALL(register_thread)(category, info, count); + PSI_THREAD_CALL(register_thread)(category, info, count); #endif } @@ -1252,14 +1252,14 @@ static inline int inline_mysql_thread_create( void *(*start_routine)(void*), void *arg) { int result; - result= PSI_CALL(spawn_thread)(key, thread, attr, start_routine, arg); + result= PSI_THREAD_CALL(spawn_thread)(key, thread, attr, start_routine, arg); return result; } static inline void inline_mysql_thread_set_psi_id(ulong id) { - struct PSI_thread *psi= PSI_CALL(get_thread)(); - PSI_CALL(set_thread_id)(psi, id); + struct PSI_thread *psi= PSI_THREAD_CALL(get_thread)(); + PSI_THREAD_CALL(set_thread_id)(psi, id); } #endif diff --git a/include/mysql/psi/psi.h b/include/mysql/psi/psi.h index 8d5e6db7307..cc2057c630d 100644 --- a/include/mysql/psi/psi.h +++ b/include/mysql/psi/psi.h @@ -899,6 +899,10 @@ struct PSI_file_locker_state_v1 enum PSI_file_operation m_operation; /** Current file. */ struct PSI_file *m_file; + /** Current file name. */ + const char *m_name; + /** Current file class. */ + void *m_class; /** Current thread. */ struct PSI_thread *m_thread; /** Operation number of bytes. */ @@ -958,6 +962,8 @@ struct PSI_digest_storage { my_bool m_full; int m_byte_count; + /** Character set number. */ + uint m_charset_number; unsigned char m_token_array[PSI_MAX_DIGEST_STORAGE_SIZE]; }; typedef struct PSI_digest_storage PSI_digest_storage; @@ -969,6 +975,9 @@ struct PSI_digest_locker_state }; typedef struct PSI_digest_locker_state PSI_digest_locker_state; +/* Duplicate of NAME_LEN, to avoid dependency on mysql_com.h */ +#define PSI_SCHEMA_NAME_LEN (64 * 3) + /** State data storage for @c get_thread_statement_locker_v1_t, @c get_thread_statement_locker_v1_t. @@ -1029,6 +1038,10 @@ struct PSI_statement_locker_state_v1 ulong m_sort_scan; /** Statement digest. */ PSI_digest_locker_state m_digest_state; + /** Current schema name. */ + char m_schema_name[PSI_SCHEMA_NAME_LEN]; + /** Length in bytes of @c m_schema_name. */ + uint m_schema_name_length; }; /** @@ -1187,10 +1200,13 @@ typedef void (*destroy_cond_v1_t)(struct PSI_cond *cond); Socket instrumentation initialisation API. @param key the registered mutex key @param socket descriptor + @param addr the socket ip address + @param addr_len length of socket ip address @return an instrumented socket */ typedef struct PSI_socket* (*init_socket_v1_t) - (PSI_socket_key key, const my_socket *fd); + (PSI_socket_key key, const my_socket *fd, + const struct sockaddr *addr, socklen_t addr_len); /** socket instrumentation destruction API. @@ -1290,7 +1306,7 @@ typedef int (*spawn_thread_v1_t)(PSI_thread_key key, @return an instrumented thread */ typedef struct PSI_thread* (*new_thread_v1_t) - (PSI_thread_key key, const void *identity, ulong thread_id); + (PSI_thread_key key, const void *identity, ulonglong thread_id); /** Assign an id to an instrumented thread. @@ -1298,7 +1314,7 @@ typedef struct PSI_thread* (*new_thread_v1_t) @param id the id to assign */ typedef void (*set_thread_id_v1_t)(struct PSI_thread *thread, - unsigned long id); + ulonglong id); /** Get the instrumentation for the running thread. @@ -1570,16 +1586,18 @@ typedef void (*end_table_lock_wait_v1_t)(struct PSI_table_locker *locker); @param op the operation to perform @param src_file the source file name @param src_line the source line number - @return an instrumented file handle */ -typedef struct PSI_file* (*start_file_open_wait_v1_t) +typedef void (*start_file_open_wait_v1_t) (struct PSI_file_locker *locker, const char *src_file, uint src_line); /** End a file instrumentation open operation, for file streams. @param locker the file locker. + @param result the opened file (NULL indicates failure, non NULL success). + @return an instrumented file handle */ -typedef void (*end_file_open_wait_v1_t)(struct PSI_file_locker *locker); +typedef struct PSI_file* (*end_file_open_wait_v1_t) + (struct PSI_file_locker *locker, void *result); /** End a file instrumentation open operation, for non stream files. @@ -1617,6 +1635,25 @@ typedef void (*end_file_wait_v1_t) (struct PSI_file_locker *locker, size_t count); /** + Start a file instrumentation close operation. + @param locker the file locker + @param op the operation to perform + @param src_file the source file name + @param src_line the source line number +*/ +typedef void (*start_file_close_wait_v1_t) + (struct PSI_file_locker *locker, const char *src_file, uint src_line); + +/** + End a file instrumentation close operation. + @param locker the file locker. + @param rc the close operation return code (0 for success). + @return an instrumented file handle +*/ +typedef void (*end_file_close_wait_v1_t) + (struct PSI_file_locker *locker, int rc); + +/** Start a new stage, and implicitly end the previous stage. @param key the key of the new stage @param src_file the source file name @@ -1632,11 +1669,12 @@ typedef void (*end_stage_v1_t) (void); Get a statement instrumentation locker. @param state data storage for the locker @param key the statement instrumentation key + @param charset client character set @return a statement locker, or NULL */ typedef struct PSI_statement_locker* (*get_thread_statement_locker_v1_t) (struct PSI_statement_locker_state_v1 *state, - PSI_statement_key key); + PSI_statement_key key, const void *charset); /** Refine a statement locker to a more specific key. @@ -1871,6 +1909,19 @@ typedef struct PSI_digest_locker* (*digest_add_token_v1_t) (struct PSI_digest_locker *locker, uint token, struct OPAQUE_LEX_YYSTYPE *yylval); /** + Stores an array of connection attributes + @param buffer char array of length encoded connection attributes + in network format + @param length legnth of the data in buffer + @param from_cs charset in which @buffer is encodded + @return state + @retval non-0 attributes truncated + @retval 0 stored the attribute +*/ +typedef int (*set_thread_connect_attrs_v1_t)(const char *buffer, uint length, + const void *from_cs); + +/** Performance Schema Interface, version 1. @since PSI_VERSION_1 */ @@ -2005,6 +2056,10 @@ struct PSI_v1 start_file_wait_v1_t start_file_wait; /** @sa end_file_wait_v1_t. */ end_file_wait_v1_t end_file_wait; + /** @sa start_file_close_wait_v1_t. */ + start_file_close_wait_v1_t start_file_close_wait; + /** @sa end_file_close_wait_v1_t. */ + end_file_close_wait_v1_t end_file_close_wait; /** @sa start_stage_v1_t. */ start_stage_v1_t start_stage; /** @sa end_stage_v1_t. */ @@ -2065,6 +2120,8 @@ struct PSI_v1 digest_start_v1_t digest_start; /** @sa digest_add_token_v1_t. */ digest_add_token_v1_t digest_add_token; + /** @sa set_thread_connect_attrs_v1_t. */ + set_thread_connect_attrs_v1_t set_thread_connect_attrs; }; /** @} (end of group Group_PSI_v1) */ @@ -2318,7 +2375,54 @@ typedef struct PSI_stage_info_none PSI_stage_info; extern MYSQL_PLUGIN_IMPORT PSI *PSI_server; -#define PSI_CALL(M) PSI_server->M +/* + Allow to override PSI_XXX_CALL at compile time + with more efficient implementations, if available. + If nothing better is available, + make a dynamic call using the PSI_server function pointer. +*/ + +#ifndef PSI_MUTEX_CALL +#define PSI_MUTEX_CALL(M) PSI_DYNAMIC_CALL(M) +#endif + +#ifndef PSI_RWLOCK_CALL +#define PSI_RWLOCK_CALL(M) PSI_DYNAMIC_CALL(M) +#endif + +#ifndef PSI_COND_CALL +#define PSI_COND_CALL(M) PSI_DYNAMIC_CALL(M) +#endif + +#ifndef PSI_THREAD_CALL +#define PSI_THREAD_CALL(M) PSI_DYNAMIC_CALL(M) +#endif + +#ifndef PSI_FILE_CALL +#define PSI_FILE_CALL(M) PSI_DYNAMIC_CALL(M) +#endif + +#ifndef PSI_SOCKET_CALL +#define PSI_SOCKET_CALL(M) PSI_DYNAMIC_CALL(M) +#endif + +#ifndef PSI_STAGE_CALL +#define PSI_STAGE_CALL(M) PSI_DYNAMIC_CALL(M) +#endif + +#ifndef PSI_STATEMENT_CALL +#define PSI_STATEMENT_CALL(M) PSI_DYNAMIC_CALL(M) +#endif + +#ifndef PSI_TABLE_CALL +#define PSI_TABLE_CALL(M) PSI_DYNAMIC_CALL(M) +#endif + +#ifndef PSI_IDLE_CALL +#define PSI_IDLE_CALL(M) PSI_DYNAMIC_CALL(M) +#endif + +#define PSI_DYNAMIC_CALL(M) PSI_server->M /** @} */ diff --git a/include/mysql/psi/psi_abi_v1.h.pp b/include/mysql/psi/psi_abi_v1.h.pp index b0559213998..f2037c5b724 100644 --- a/include/mysql/psi/psi_abi_v1.h.pp +++ b/include/mysql/psi/psi_abi_v1.h.pp @@ -221,6 +221,8 @@ struct PSI_file_locker_state_v1 uint m_flags; enum PSI_file_operation m_operation; struct PSI_file *m_file; + const char *m_name; + void *m_class; struct PSI_thread *m_thread; size_t m_number_of_bytes; ulonglong m_timer_start; @@ -243,6 +245,7 @@ struct PSI_digest_storage { my_bool m_full; int m_byte_count; + uint m_charset_number; unsigned char m_token_array[1024]; }; typedef struct PSI_digest_storage PSI_digest_storage; @@ -278,6 +281,8 @@ struct PSI_statement_locker_state_v1 ulong m_sort_rows; ulong m_sort_scan; PSI_digest_locker_state m_digest_state; + char m_schema_name[(64 * 3)]; + uint m_schema_name_length; }; struct PSI_socket_locker_state_v1 { @@ -318,7 +323,8 @@ typedef struct PSI_cond* (*init_cond_v1_t) (PSI_cond_key key, const void *identity); typedef void (*destroy_cond_v1_t)(struct PSI_cond *cond); typedef struct PSI_socket* (*init_socket_v1_t) - (PSI_socket_key key, const my_socket *fd); + (PSI_socket_key key, const my_socket *fd, + const struct sockaddr *addr, socklen_t addr_len); typedef void (*destroy_socket_v1_t)(struct PSI_socket *socket); typedef struct PSI_table_share* (*get_table_share_v1_t) (my_bool temporary, struct TABLE_SHARE *share); @@ -340,9 +346,9 @@ typedef int (*spawn_thread_v1_t)(PSI_thread_key key, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg); typedef struct PSI_thread* (*new_thread_v1_t) - (PSI_thread_key key, const void *identity, ulong thread_id); + (PSI_thread_key key, const void *identity, ulonglong thread_id); typedef void (*set_thread_id_v1_t)(struct PSI_thread *thread, - unsigned long id); + ulonglong id); typedef struct PSI_thread* (*get_thread_v1_t)(void); typedef void (*set_thread_user_v1_t)(const char *user, int user_len); typedef void (*set_thread_user_host_v1_t)(const char *user, int user_len, @@ -420,9 +426,10 @@ typedef struct PSI_table_locker* (*start_table_lock_wait_v1_t) ulong flags, const char *src_file, uint src_line); typedef void (*end_table_lock_wait_v1_t)(struct PSI_table_locker *locker); -typedef struct PSI_file* (*start_file_open_wait_v1_t) +typedef void (*start_file_open_wait_v1_t) (struct PSI_file_locker *locker, const char *src_file, uint src_line); -typedef void (*end_file_open_wait_v1_t)(struct PSI_file_locker *locker); +typedef struct PSI_file* (*end_file_open_wait_v1_t) + (struct PSI_file_locker *locker, void *result); typedef void (*end_file_open_wait_and_bind_to_descriptor_v1_t) (struct PSI_file_locker *locker, File file); typedef void (*start_file_wait_v1_t) @@ -430,12 +437,16 @@ typedef void (*start_file_wait_v1_t) const char *src_file, uint src_line); typedef void (*end_file_wait_v1_t) (struct PSI_file_locker *locker, size_t count); +typedef void (*start_file_close_wait_v1_t) + (struct PSI_file_locker *locker, const char *src_file, uint src_line); +typedef void (*end_file_close_wait_v1_t) + (struct PSI_file_locker *locker, int rc); typedef void (*start_stage_v1_t) (PSI_stage_key key, const char *src_file, int src_line); typedef void (*end_stage_v1_t) (void); typedef struct PSI_statement_locker* (*get_thread_statement_locker_v1_t) (struct PSI_statement_locker_state_v1 *state, - PSI_statement_key key); + PSI_statement_key key, const void *charset); typedef struct PSI_statement_locker* (*refine_statement_v1_t) (struct PSI_statement_locker *locker, PSI_statement_key key); @@ -499,6 +510,8 @@ typedef struct PSI_digest_locker * (*digest_start_v1_t) (struct PSI_statement_locker *locker); typedef struct PSI_digest_locker* (*digest_add_token_v1_t) (struct PSI_digest_locker *locker, uint token, struct OPAQUE_LEX_YYSTYPE *yylval); +typedef int (*set_thread_connect_attrs_v1_t)(const char *buffer, uint length, + const void *from_cs); struct PSI_v1 { register_mutex_v1_t register_mutex; @@ -566,6 +579,8 @@ struct PSI_v1 end_file_open_wait_and_bind_to_descriptor; start_file_wait_v1_t start_file_wait; end_file_wait_v1_t end_file_wait; + start_file_close_wait_v1_t start_file_close_wait; + end_file_close_wait_v1_t end_file_close_wait; start_stage_v1_t start_stage; end_stage_v1_t end_stage; get_thread_statement_locker_v1_t get_thread_statement_locker; @@ -596,6 +611,7 @@ struct PSI_v1 set_socket_thread_owner_v1_t set_socket_thread_owner; digest_start_v1_t digest_start; digest_add_token_v1_t digest_add_token; + set_thread_connect_attrs_v1_t set_thread_connect_attrs; }; typedef struct PSI_v1 PSI; typedef struct PSI_mutex_info_v1 PSI_mutex_info; diff --git a/include/mysql/service_debug_sync.h b/include/mysql/service_debug_sync.h index bb1202c5e63..eee8e6bbe96 100644 --- a/include/mysql/service_debug_sync.h +++ b/include/mysql/service_debug_sync.h @@ -339,9 +339,16 @@ extern void (*debug_sync_C_callback_ptr)(MYSQL_THD, const char *, size_t); if (debug_sync_service) \ debug_sync_service(thd, STRING_WITH_LEN(name)); \ } while(0) + +#define DEBUG_SYNC_C_IF_THD(thd, name) \ + do { \ + if (debug_sync_service && thd) \ + debug_sync_service((MYSQL_THD) thd, STRING_WITH_LEN(name)); \ + } while(0) #else -#define DEBUG_SYNC(thd,name) do { } while(0) -#endif +#define DEBUG_SYNC(thd,name) do { } while(0) +#define DEBUG_SYNC_C_IF_THD(thd, _sync_point_name_) do { } while(0) +#endif /* defined(ENABLED_DEBUG_SYNC) */ /* compatibility macro */ #define DEBUG_SYNC_C(name) DEBUG_SYNC(NULL, name) diff --git a/include/mysql/service_my_plugin_log.h b/include/mysql/service_my_plugin_log.h new file mode 100644 index 00000000000..0cf7817573c --- /dev/null +++ b/include/mysql/service_my_plugin_log.h @@ -0,0 +1,64 @@ +/* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; version 2 of the + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +/** + @file + This service provides functions to report error conditions and log to + mysql error log. +*/ + +#ifndef MYSQL_SERVICE_MY_PLUGIN_LOG_INCLUDED +#define MYSQL_SERVICE_MY_PLUGIN_LOG_INCLUDED + +#ifndef MYSQL_ABI_CHECK +#include <stdarg.h> +#endif + +/* keep in sync with the loglevel enum in my_sys.h */ +enum plugin_log_level +{ + MY_ERROR_LEVEL, + MY_WARNING_LEVEL, + MY_INFORMATION_LEVEL +}; + + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct my_plugin_log_service +{ + /** write a message to the log */ + int (*my_plugin_log_message)(MYSQL_PLUGIN *, enum plugin_log_level, const char *, ...); +} *my_plugin_log_service; + +#ifdef MYSQL_DYNAMIC_PLUGIN + +#define my_plugin_log_message my_plugin_log_service->my_plugin_log_message + +#else + +int my_plugin_log_message(MYSQL_PLUGIN *plugin, enum plugin_log_level level, + const char *format, ...); + +#endif + +#ifdef __cplusplus +} +#endif + +#endif |