From: Marc Alff Date: May 4 2011 3:17am Subject: bzr commit into mysql-trunk-pfs-tuning branch (marc.alff:3366) List-Archive: http://lists.mysql.com/commits/136603 Message-Id: <201105040318.p443I185000672@acsmt357.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============6849154642693999057==" --===============6849154642693999057== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///Users/malff/BZR_TREE/mysql-trunk-pfs-tuning/ based on revid:marc.alff@stripped 3366 Marc Alff 2011-05-03 PERFORMANCE SCHEMA optimiztion Potential improvements, to benchmark: 1) Removed "locker= NULL" from the main instrumentation path 2) Removed "if (locker == NULL) from the main instrumentation path, for most end events 3) Pushed "if (that->m_psi != NULL)" from the interface to the implementation 4) In the implementation, pushed "if (that->m_psi != NULL)" after the check for the global_instrumentation consumer, to shorten the instrumentation path. modified: include/mysql/psi/mysql_file.h include/mysql/psi/mysql_table.h include/mysql/psi/mysql_thread.h storage/innobase/include/os0sync.ic storage/innobase/include/sync0rw.ic storage/innobase/include/sync0sync.ic storage/innobase/include/univ.i storage/perfschema/pfs.cc === modified file 'include/mysql/psi/mysql_file.h' --- a/include/mysql/psi/mysql_file.h 2011-05-03 23:49:32 +0000 +++ b/include/mysql/psi/mysql_file.h 2011-05-04 03:17:46 +0000 @@ -531,21 +531,20 @@ inline_mysql_file_fgets( { char *result; #ifdef HAVE_PSI_FILE_INTERFACE - struct PSI_file_locker *locker= NULL; + struct PSI_file_locker *locker; PSI_file_locker_state state; - if (likely(file->m_psi != NULL)) + locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, + PSI_FILE_READ); + if (likely(locker != NULL)) { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_READ); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) size, src_file, src_line); + PSI_server->start_file_wait(locker, (size_t) size, src_file, src_line); + result= fgets(str, size, file->m_file); + PSI_server->end_file_wait(locker, result ? strlen(result) : 0); + return result; } #endif + result= fgets(str, size, file->m_file); -#ifdef HAVE_PSI_FILE_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, result ? strlen(result) : 0); -#endif return result; } @@ -558,21 +557,20 @@ inline_mysql_file_fgetc( { int result; #ifdef HAVE_PSI_FILE_INTERFACE - struct PSI_file_locker *locker= NULL; + struct PSI_file_locker *locker; PSI_file_locker_state state; - if (likely(file->m_psi != NULL)) + locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, + PSI_FILE_READ); + if (likely(locker != NULL)) { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_READ); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 1, src_file, src_line); + PSI_server->start_file_wait(locker, (size_t) 1, src_file, src_line); + result= fgetc(file->m_file); + PSI_server->end_file_wait(locker, (size_t) 1); + return result; } #endif + result= fgetc(file->m_file); -#ifdef HAVE_PSI_FILE_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) 1); -#endif return result; } @@ -587,23 +585,20 @@ inline_mysql_file_fputs( #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker= NULL; PSI_file_locker_state state; - size_t bytes= 0; - if (likely(file->m_psi != NULL)) + size_t bytes; + locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, + PSI_FILE_WRITE); + if (likely(locker != NULL)) { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_WRITE); - if (likely(locker != NULL)) - { - bytes= str ? strlen(str) : 0; - PSI_server->start_file_wait(locker, bytes, src_file, src_line); - } + bytes= str ? strlen(str) : 0; + PSI_server->start_file_wait(locker, bytes, src_file, src_line); + result= fputs(str, file->m_file); + PSI_server->end_file_wait(locker, bytes); + return result; } #endif + result= fputs(str, file->m_file); -#ifdef HAVE_PSI_FILE_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, bytes); -#endif return result; } @@ -616,21 +611,20 @@ inline_mysql_file_fputc( { int result; #ifdef HAVE_PSI_FILE_INTERFACE - struct PSI_file_locker *locker= NULL; + struct PSI_file_locker *locker; PSI_file_locker_state state; - if (likely(file->m_psi != NULL)) + locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, + PSI_FILE_WRITE); + if (likely(locker != NULL)) { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_WRITE); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 1, src_file, src_line); + PSI_server->start_file_wait(locker, (size_t) 1, src_file, src_line); + result= fputc(c, file->m_file); + PSI_server->end_file_wait(locker, (size_t) 1); + return result; } #endif + result= fputc(c, file->m_file); -#ifdef HAVE_PSI_FILE_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) 1); -#endif return result; } @@ -643,23 +637,24 @@ inline_mysql_file_fprintf(MYSQL_FILE *fi int result; va_list args; #ifdef HAVE_PSI_FILE_INTERFACE - struct PSI_file_locker *locker= NULL; + struct PSI_file_locker *locker; PSI_file_locker_state state; - if (likely(file->m_psi != NULL)) + locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, + PSI_FILE_WRITE); + if (likely(locker != NULL)) { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_WRITE); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 0, __FILE__, __LINE__); + PSI_server->start_file_wait(locker, (size_t) 0, __FILE__, __LINE__); + va_start(args, format); + result= vfprintf(file->m_file, format, args); + va_end(args); + PSI_server->end_file_wait(locker, (size_t) result); + return result; } #endif + va_start(args, format); result= vfprintf(file->m_file, format, args); va_end(args); -#ifdef HAVE_PSI_FILE_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) result); -#endif return result; } @@ -672,21 +667,20 @@ inline_mysql_file_vfprintf( { int result; #ifdef HAVE_PSI_FILE_INTERFACE - struct PSI_file_locker *locker= NULL; + struct PSI_file_locker *locker; PSI_file_locker_state state; - if (likely(file->m_psi != NULL)) + locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, + PSI_FILE_WRITE); + if (likely(locker != NULL)) { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_WRITE); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); + PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); + result= vfprintf(file->m_file, format, args); + PSI_server->end_file_wait(locker, (size_t) result); + return result; } #endif + result= vfprintf(file->m_file, format, args); -#ifdef HAVE_PSI_FILE_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) result); -#endif return result; } @@ -699,21 +693,20 @@ inline_mysql_file_fflush( { int result; #ifdef HAVE_PSI_FILE_INTERFACE - struct PSI_file_locker *locker= NULL; + struct PSI_file_locker *locker; PSI_file_locker_state state; - if (likely(file->m_psi != NULL)) + locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, + PSI_FILE_FLUSH); + if (likely(locker != NULL)) { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_FLUSH); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); + PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); + result= fflush(file->m_file); + PSI_server->end_file_wait(locker, (size_t) 0); + return result; } #endif + result= fflush(file->m_file); -#ifdef HAVE_PSI_FILE_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) 0); -#endif return result; } @@ -808,27 +801,33 @@ inline_mysql_file_fopen( that= (MYSQL_FILE*) my_malloc(sizeof(MYSQL_FILE), MYF(MY_WME)); if (likely(that != NULL)) { - that->m_psi= NULL; - { #ifdef HAVE_PSI_FILE_INTERFACE - struct PSI_file_locker *locker= NULL; - PSI_file_locker_state state; - locker= PSI_server->get_thread_file_name_locker - (&state, key, PSI_FILE_STREAM_OPEN, filename, that); - if (likely(locker != NULL)) - that->m_psi= PSI_server->start_file_open_wait(locker, src_file, - src_line); -#endif + struct PSI_file_locker *locker= NULL; + PSI_file_locker_state state; + locker= PSI_server->get_thread_file_name_locker + (&state, key, PSI_FILE_STREAM_OPEN, filename, that); + if (likely(locker != NULL)) + { + that->m_psi= PSI_server->start_file_open_wait(locker, src_file, + src_line); that->m_file= my_fopen(filename, flags, myFlags); -#ifdef HAVE_PSI_FILE_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_open_wait(locker); -#endif + PSI_server->end_file_open_wait(locker); + if (unlikely(that->m_file == NULL)) { my_free(that); return NULL; } + return that; + } +#endif + + that->m_psi= NULL; + that->m_file= my_fopen(filename, flags, myFlags); + if (unlikely(that->m_file == NULL)) + { + my_free(that); + return NULL; } } return that; @@ -845,22 +844,21 @@ inline_mysql_file_fclose( if (likely(file != NULL)) { #ifdef HAVE_PSI_FILE_INTERFACE - struct PSI_file_locker *locker= NULL; + struct PSI_file_locker *locker; PSI_file_locker_state state; - DBUG_ASSERT(file != NULL); - if (likely(file->m_psi != NULL)) + locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, + PSI_FILE_STREAM_CLOSE); + if (likely(locker != NULL)) { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_STREAM_CLOSE); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); + PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); + result= my_fclose(file->m_file, flags); + PSI_server->end_file_wait(locker, (size_t) 0); + my_free(file); + return result; } #endif + result= my_fclose(file->m_file, flags); -#ifdef HAVE_PSI_FILE_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) 0); -#endif my_free(file); } return result; @@ -873,30 +871,27 @@ inline_mysql_file_fread( #endif MYSQL_FILE *file, uchar *buffer, size_t count, myf flags) { - size_t result= 0; + size_t result; #ifdef HAVE_PSI_FILE_INTERFACE - struct PSI_file_locker *locker= NULL; + struct PSI_file_locker *locker; PSI_file_locker_state state; - if (likely(file->m_psi != NULL)) - { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_READ); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, count, src_file, src_line); - } -#endif - result= my_fread(file->m_file, buffer, count, flags); -#ifdef HAVE_PSI_FILE_INTERFACE + size_t bytes_read; + locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, + PSI_FILE_READ); if (likely(locker != NULL)) { - size_t bytes_read; + PSI_server->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_server->end_file_wait(locker, bytes_read); + return result; } #endif + + result= my_fread(file->m_file, buffer, count, flags); return result; } @@ -907,30 +902,27 @@ inline_mysql_file_fwrite( #endif MYSQL_FILE *file, const uchar *buffer, size_t count, myf flags) { - size_t result= 0; + size_t result; #ifdef HAVE_PSI_FILE_INTERFACE - struct PSI_file_locker *locker= NULL; + struct PSI_file_locker *locker; PSI_file_locker_state state; - if (likely(file->m_psi != NULL)) - { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_WRITE); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, count, src_file, src_line); - } -#endif - result= my_fwrite(file->m_file, buffer, count, flags); -#ifdef HAVE_PSI_FILE_INTERFACE + size_t bytes_written; + locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, + PSI_FILE_WRITE); if (likely(locker != NULL)) { - size_t bytes_written; + PSI_server->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_server->end_file_wait(locker, bytes_written); + return result; } #endif + + result= my_fwrite(file->m_file, buffer, count, flags); return result; } @@ -943,21 +935,20 @@ inline_mysql_file_fseek( { my_off_t result; #ifdef HAVE_PSI_FILE_INTERFACE - struct PSI_file_locker *locker= NULL; + struct PSI_file_locker *locker; PSI_file_locker_state state; - if (likely(file->m_psi != NULL)) + locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, + PSI_FILE_SEEK); + if (likely(locker != NULL)) { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_SEEK); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); + PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); + result= my_fseek(file->m_file, pos, whence, flags); + PSI_server->end_file_wait(locker, (size_t) 0); + return result; } #endif + result= my_fseek(file->m_file, pos, whence, flags); -#ifdef HAVE_PSI_FILE_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) 0); -#endif return result; } @@ -970,21 +961,20 @@ inline_mysql_file_ftell( { my_off_t result; #ifdef HAVE_PSI_FILE_INTERFACE - struct PSI_file_locker *locker= NULL; + struct PSI_file_locker *locker; PSI_file_locker_state state; - if (likely(file->m_psi != NULL)) + locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, + PSI_FILE_TELL); + if (likely(locker != NULL)) { - locker= PSI_server->get_thread_file_stream_locker(&state, file->m_psi, - PSI_FILE_TELL); - if (likely(locker != NULL)) - PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); + PSI_server->start_file_wait(locker, (size_t) 0, src_file, src_line); + result= my_ftell(file->m_file, flags); + PSI_server->end_file_wait(locker, (size_t) 0); + return result; } #endif + result= my_ftell(file->m_file, flags); -#ifdef HAVE_PSI_FILE_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_file_wait(locker, (size_t) 0); -#endif return result; } === modified file 'include/mysql/psi/mysql_table.h' --- a/include/mysql/psi/mysql_table.h 2011-05-03 23:49:32 +0000 +++ b/include/mysql/psi/mysql_table.h 2011-05-04 03:17:46 +0000 @@ -97,13 +97,10 @@ inline_mysql_start_table_io_wait(PSI_tab uint index, const char *src_file, int src_line) { - struct PSI_table_locker *locker= NULL; - if (likely(psi != NULL)) - { - locker= PSI_server->get_thread_table_io_locker(state, psi, op, index); - if (likely(locker != NULL)) - PSI_server->start_table_io_wait(locker, src_file, src_line); - } + struct PSI_table_locker *locker; + locker= PSI_server->get_thread_table_io_locker(state, psi, op, index); + if (likely(locker != NULL)) + PSI_server->start_table_io_wait(locker, src_file, src_line); return locker; } @@ -165,13 +162,10 @@ inline_mysql_start_table_lock_wait(PSI_t enum PSI_table_lock_operation op, ulong flags, const char *src_file, int src_line) { - struct PSI_table_locker *locker= NULL; - if (likely(psi != NULL)) - { - locker= PSI_server->get_thread_table_lock_locker(state, psi, op, flags); - if (likely(locker != NULL)) - PSI_server->start_table_lock_wait(locker, src_file, src_line); - } + struct PSI_table_locker *locker; + locker= PSI_server->get_thread_table_lock_locker(state, psi, op, flags); + if (likely(locker != NULL)) + PSI_server->start_table_lock_wait(locker, src_file, src_line); return locker; } === modified file 'include/mysql/psi/mysql_thread.h' --- a/include/mysql/psi/mysql_thread.h 2011-05-03 23:49:32 +0000 +++ b/include/mysql/psi/mysql_thread.h 2011-05-04 03:17:46 +0000 @@ -623,11 +623,8 @@ static inline int inline_mysql_mutex_des ) { #ifdef HAVE_PSI_MUTEX_INTERFACE - if (likely(that->m_psi != NULL)) - { - PSI_server->destroy_mutex(that->m_psi); - that->m_psi= NULL; - } + PSI_server->destroy_mutex(that->m_psi); + that->m_psi= NULL; #endif #ifdef SAFE_MUTEX return safe_mutex_destroy(&that->m_mutex, src_file, src_line); @@ -645,24 +642,27 @@ static inline int inline_mysql_mutex_loc { int result; #ifdef HAVE_PSI_MUTEX_INTERFACE - struct PSI_mutex_locker *locker= NULL; + struct PSI_mutex_locker *locker; PSI_mutex_locker_state state; - if (likely(that->m_psi != NULL)) + locker= PSI_server->get_thread_mutex_locker(&state, that->m_psi, PSI_MUTEX_LOCK); + if (likely(locker != NULL)) { - locker= PSI_server->get_thread_mutex_locker(&state, that->m_psi, PSI_MUTEX_LOCK); - if (likely(locker != NULL)) - PSI_server->start_mutex_wait(locker, src_file, src_line); + PSI_server->start_mutex_wait(locker, src_file, src_line); +#ifdef SAFE_MUTEX + result= safe_mutex_lock(&that->m_mutex, FALSE, src_file, src_line); +#else + result= pthread_mutex_lock(&that->m_mutex); +#endif + PSI_server->end_mutex_wait(locker, result); + return result; } #endif + #ifdef SAFE_MUTEX result= safe_mutex_lock(&that->m_mutex, FALSE, src_file, src_line); #else result= pthread_mutex_lock(&that->m_mutex); #endif -#ifdef HAVE_PSI_MUTEX_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_mutex_wait(locker, result); -#endif return result; } @@ -675,24 +675,27 @@ static inline int inline_mysql_mutex_try { int result; #ifdef HAVE_PSI_MUTEX_INTERFACE - struct PSI_mutex_locker *locker= NULL; + struct PSI_mutex_locker *locker; PSI_mutex_locker_state state; - if (likely(that->m_psi != NULL)) + locker= PSI_server->get_thread_mutex_locker(&state, that->m_psi, PSI_MUTEX_TRYLOCK); + if (likely(locker != NULL)) { - locker= PSI_server->get_thread_mutex_locker(&state, that->m_psi, PSI_MUTEX_TRYLOCK); - if (likely(locker != NULL)) - PSI_server->start_mutex_wait(locker, src_file, src_line); + PSI_server->start_mutex_wait(locker, src_file, src_line); +#ifdef SAFE_MUTEX + result= safe_mutex_lock(&that->m_mutex, TRUE, src_file, src_line); +#else + result= pthread_mutex_trylock(&that->m_mutex); +#endif + PSI_server->end_mutex_wait(locker, result); + return result; } #endif + #ifdef SAFE_MUTEX result= safe_mutex_lock(&that->m_mutex, TRUE, src_file, src_line); #else result= pthread_mutex_trylock(&that->m_mutex); #endif -#ifdef HAVE_PSI_MUTEX_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_mutex_wait(locker, result); -#endif return result; } @@ -705,8 +708,7 @@ static inline int inline_mysql_mutex_unl { int result; #ifdef HAVE_PSI_MUTEX_INTERFACE - if (likely(that->m_psi != NULL)) - PSI_server->unlock_mutex(that->m_psi); + PSI_server->unlock_mutex(that->m_psi); #endif #ifdef SAFE_MUTEX result= safe_mutex_unlock(&that->m_mutex, src_file, src_line); @@ -770,11 +772,8 @@ static inline int inline_mysql_rwlock_de mysql_rwlock_t *that) { #ifdef HAVE_PSI_RWLOCK_INTERFACE - if (likely(that->m_psi != NULL)) - { - PSI_server->destroy_rwlock(that->m_psi); - that->m_psi= NULL; - } + PSI_server->destroy_rwlock(that->m_psi); + that->m_psi= NULL; #endif return rwlock_destroy(&that->m_rwlock); } @@ -784,11 +783,8 @@ static inline int inline_mysql_prlock_de mysql_prlock_t *that) { #ifdef HAVE_PSI_RWLOCK_INTERFACE - if (likely(that->m_psi != NULL)) - { - PSI_server->destroy_rwlock(that->m_psi); - that->m_psi= NULL; - } + PSI_server->destroy_rwlock(that->m_psi); + that->m_psi= NULL; #endif return rw_pr_destroy(&that->m_prlock); } @@ -803,21 +799,20 @@ static inline int inline_mysql_rwlock_rd { int result; #ifdef HAVE_PSI_RWLOCK_INTERFACE - struct PSI_rwlock_locker *locker= NULL; + struct PSI_rwlock_locker *locker; PSI_rwlock_locker_state state; - if (likely(that->m_psi != NULL)) + locker= PSI_server->get_thread_rwlock_locker(&state, that->m_psi, + PSI_RWLOCK_READLOCK); + if (likely(locker != NULL)) { - locker= PSI_server->get_thread_rwlock_locker(&state, that->m_psi, - PSI_RWLOCK_READLOCK); - if (likely(locker != NULL)) - PSI_server->start_rwlock_rdwait(locker, src_file, src_line); + PSI_server->start_rwlock_rdwait(locker, src_file, src_line); + result= rw_rdlock(&that->m_rwlock); + PSI_server->end_rwlock_rdwait(locker, result); + return result; } #endif + result= rw_rdlock(&that->m_rwlock); -#ifdef HAVE_PSI_RWLOCK_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_rwlock_rdwait(locker, result); -#endif return result; } @@ -831,21 +826,20 @@ static inline int inline_mysql_prlock_rd { int result; #ifdef HAVE_PSI_RWLOCK_INTERFACE - struct PSI_rwlock_locker *locker= NULL; + struct PSI_rwlock_locker *locker; PSI_rwlock_locker_state state; - if (likely(that->m_psi != NULL)) + locker= PSI_server->get_thread_rwlock_locker(&state, that->m_psi, + PSI_RWLOCK_READLOCK); + if (likely(locker != NULL)) { - locker= PSI_server->get_thread_rwlock_locker(&state, that->m_psi, - PSI_RWLOCK_READLOCK); - if (likely(locker != NULL)) - PSI_server->start_rwlock_rdwait(locker, src_file, src_line); + PSI_server->start_rwlock_rdwait(locker, src_file, src_line); + result= rw_pr_rdlock(&that->m_prlock); + PSI_server->end_rwlock_rdwait(locker, result); + return result; } #endif + result= rw_pr_rdlock(&that->m_prlock); -#ifdef HAVE_PSI_RWLOCK_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_rwlock_rdwait(locker, result); -#endif return result; } #endif @@ -859,21 +853,20 @@ static inline int inline_mysql_rwlock_wr { int result; #ifdef HAVE_PSI_RWLOCK_INTERFACE - struct PSI_rwlock_locker *locker= NULL; + struct PSI_rwlock_locker *locker; PSI_rwlock_locker_state state; - if (likely(that->m_psi != NULL)) + locker= PSI_server->get_thread_rwlock_locker(&state, that->m_psi, + PSI_RWLOCK_WRITELOCK); + if (likely(locker != NULL)) { - locker= PSI_server->get_thread_rwlock_locker(&state, that->m_psi, - PSI_RWLOCK_WRITELOCK); - if (likely(locker != NULL)) - PSI_server->start_rwlock_wrwait(locker, src_file, src_line); + PSI_server->start_rwlock_wrwait(locker, src_file, src_line); + result= rw_wrlock(&that->m_rwlock); + PSI_server->end_rwlock_wrwait(locker, result); + return result; } #endif + result= rw_wrlock(&that->m_rwlock); -#ifdef HAVE_PSI_RWLOCK_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_rwlock_wrwait(locker, result); -#endif return result; } @@ -887,21 +880,20 @@ static inline int inline_mysql_prlock_wr { int result; #ifdef HAVE_PSI_RWLOCK_INTERFACE - struct PSI_rwlock_locker *locker= NULL; + struct PSI_rwlock_locker *locker; PSI_rwlock_locker_state state; - if (likely(that->m_psi != NULL)) + locker= PSI_server->get_thread_rwlock_locker(&state, that->m_psi, + PSI_RWLOCK_WRITELOCK); + if (likely(locker != NULL)) { - locker= PSI_server->get_thread_rwlock_locker(&state, that->m_psi, - PSI_RWLOCK_WRITELOCK); - if (likely(locker != NULL)) - PSI_server->start_rwlock_wrwait(locker, src_file, src_line); + PSI_server->start_rwlock_wrwait(locker, src_file, src_line); + result= rw_pr_wrlock(&that->m_prlock); + PSI_server->end_rwlock_wrwait(locker, result); + return result; } #endif + result= rw_pr_wrlock(&that->m_prlock); -#ifdef HAVE_PSI_RWLOCK_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_rwlock_wrwait(locker, result); -#endif return result; } #endif @@ -915,21 +907,20 @@ static inline int inline_mysql_rwlock_tr { int result; #ifdef HAVE_PSI_RWLOCK_INTERFACE - struct PSI_rwlock_locker *locker= NULL; + struct PSI_rwlock_locker *locker; PSI_rwlock_locker_state state; - if (likely(that->m_psi != NULL)) + locker= PSI_server->get_thread_rwlock_locker(&state, that->m_psi, + PSI_RWLOCK_TRYREADLOCK); + if (likely(locker != NULL)) { - locker= PSI_server->get_thread_rwlock_locker(&state, that->m_psi, - PSI_RWLOCK_TRYREADLOCK); - if (likely(locker != NULL)) - PSI_server->start_rwlock_rdwait(locker, src_file, src_line); + PSI_server->start_rwlock_rdwait(locker, src_file, src_line); + result= rw_tryrdlock(&that->m_rwlock); + PSI_server->end_rwlock_rdwait(locker, result); + return result; } #endif + result= rw_tryrdlock(&that->m_rwlock); -#ifdef HAVE_PSI_RWLOCK_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_rwlock_rdwait(locker, result); -#endif return result; } @@ -942,21 +933,20 @@ static inline int inline_mysql_rwlock_tr { int result; #ifdef HAVE_PSI_RWLOCK_INTERFACE - struct PSI_rwlock_locker *locker= NULL; + struct PSI_rwlock_locker *locker; PSI_rwlock_locker_state state; - if (likely(that->m_psi != NULL)) + locker= PSI_server->get_thread_rwlock_locker(&state, that->m_psi, + PSI_RWLOCK_TRYWRITELOCK); + if (likely(locker != NULL)) { - locker= PSI_server->get_thread_rwlock_locker(&state, that->m_psi, - PSI_RWLOCK_TRYWRITELOCK); - if (likely(locker != NULL)) - PSI_server->start_rwlock_wrwait(locker, src_file, src_line); + PSI_server->start_rwlock_wrwait(locker, src_file, src_line); + result= rw_trywrlock(&that->m_rwlock); + PSI_server->end_rwlock_wrwait(locker, result); + return result; } #endif + result= rw_trywrlock(&that->m_rwlock); -#ifdef HAVE_PSI_RWLOCK_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_rwlock_wrwait(locker, result); -#endif return result; } @@ -965,8 +955,7 @@ static inline int inline_mysql_rwlock_un { int result; #ifdef HAVE_PSI_RWLOCK_INTERFACE - if (likely(that->m_psi != NULL)) - PSI_server->unlock_rwlock(that->m_psi); + PSI_server->unlock_rwlock(that->m_psi); #endif result= rw_unlock(&that->m_rwlock); return result; @@ -978,8 +967,7 @@ static inline int inline_mysql_prlock_un { int result; #ifdef HAVE_PSI_RWLOCK_INTERFACE - if (likely(that->m_psi != NULL)) - PSI_server->unlock_rwlock(that->m_psi); + PSI_server->unlock_rwlock(that->m_psi); #endif result= rw_pr_unlock(&that->m_prlock); return result; @@ -1022,11 +1010,8 @@ static inline int inline_mysql_cond_dest mysql_cond_t *that) { #ifdef HAVE_PSI_COND_INTERFACE - if (likely(that->m_psi != NULL)) - { - PSI_server->destroy_cond(that->m_psi); - that->m_psi= NULL; - } + PSI_server->destroy_cond(that->m_psi); + that->m_psi= NULL; #endif return pthread_cond_destroy(&that->m_cond); } @@ -1041,21 +1026,20 @@ static inline int inline_mysql_cond_wait { int result; #ifdef HAVE_PSI_COND_INTERFACE - struct PSI_cond_locker *locker= NULL; + struct PSI_cond_locker *locker; PSI_cond_locker_state state; - if (likely(that->m_psi != NULL)) + locker= PSI_server->get_thread_cond_locker(&state, that->m_psi, mutex->m_psi, + PSI_COND_WAIT); + if (likely(locker != NULL)) { - locker= PSI_server->get_thread_cond_locker(&state, that->m_psi, mutex->m_psi, - PSI_COND_WAIT); - if (likely(locker != NULL)) - PSI_server->start_cond_wait(locker, src_file, src_line); + PSI_server->start_cond_wait(locker, src_file, src_line); + result= pthread_cond_wait(&that->m_cond, &mutex->m_mutex); + PSI_server->end_cond_wait(locker, result); + return result; } #endif + result= pthread_cond_wait(&that->m_cond, &mutex->m_mutex); -#ifdef HAVE_PSI_COND_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_cond_wait(locker, result); -#endif return result; } @@ -1070,21 +1054,20 @@ static inline int inline_mysql_cond_time { int result; #ifdef HAVE_PSI_COND_INTERFACE - struct PSI_cond_locker *locker= NULL; + struct PSI_cond_locker *locker; PSI_cond_locker_state state; - if (likely(that->m_psi != NULL)) + locker= PSI_server->get_thread_cond_locker(&state, that->m_psi, mutex->m_psi, + PSI_COND_TIMEDWAIT); + if (likely(locker != NULL)) { - locker= PSI_server->get_thread_cond_locker(&state, that->m_psi, mutex->m_psi, - PSI_COND_TIMEDWAIT); - if (likely(locker != NULL)) - PSI_server->start_cond_wait(locker, src_file, src_line); + PSI_server->start_cond_wait(locker, src_file, src_line); + result= pthread_cond_timedwait(&that->m_cond, &mutex->m_mutex, abstime); + PSI_server->end_cond_wait(locker, result); + return result; } #endif + result= pthread_cond_timedwait(&that->m_cond, &mutex->m_mutex, abstime); -#ifdef HAVE_PSI_COND_INTERFACE - if (likely(locker != NULL)) - PSI_server->end_cond_wait(locker, result); -#endif return result; } @@ -1093,8 +1076,7 @@ static inline int inline_mysql_cond_sign { int result; #ifdef HAVE_PSI_COND_INTERFACE - if (likely(that->m_psi != NULL)) - PSI_server->signal_cond(that->m_psi); + PSI_server->signal_cond(that->m_psi); #endif result= pthread_cond_signal(&that->m_cond); return result; @@ -1105,8 +1087,7 @@ static inline int inline_mysql_cond_broa { int result; #ifdef HAVE_PSI_COND_INTERFACE - if (likely(that->m_psi != NULL)) - PSI_server->broadcast_cond(that->m_psi); + PSI_server->broadcast_cond(that->m_psi); #endif result= pthread_cond_broadcast(&that->m_cond); return result; === modified file 'storage/innobase/include/os0sync.ic' --- a/storage/innobase/include/os0sync.ic 2011-02-15 09:40:34 +0000 +++ b/storage/innobase/include/os0sync.ic 2011-05-04 03:17:46 +0000 @@ -65,10 +65,11 @@ pfs_os_fast_mutex_init( key */ os_fast_mutex_t* fast_mutex) /*!< out: fast mutex */ { - fast_mutex->pfs_psi = (PSI_server && PFS_IS_INSTRUMENTED(key)) - ? PSI_server->init_mutex(key, - &fast_mutex->mutex) - : NULL; +#ifdef HAVE_PSI_MUTEX_INTERFACE + fast_mutex->pfs_psi = PSI_server->init_mutex(key, &fast_mutex->mutex); +#else + fast_mutex->pfs_psi = NULL; +#endif os_fast_mutex_init_func(&fast_mutex->mutex); } @@ -83,10 +84,10 @@ pfs_os_fast_mutex_free( /*===================*/ os_fast_mutex_t* fast_mutex) /*!< in/out: mutex */ { - if (UNIV_LIKELY(PSI_server && fast_mutex->pfs_psi)) { - PSI_server->destroy_mutex(fast_mutex->pfs_psi); - fast_mutex->pfs_psi = NULL; - } +#ifdef HAVE_PSI_MUTEX_INTERFACE + PSI_server->destroy_mutex(fast_mutex->pfs_psi); +#endif + fast_mutex->pfs_psi = NULL; os_fast_mutex_free_func(&fast_mutex->mutex); } @@ -104,23 +105,22 @@ pfs_os_fast_mutex_lock( locked */ ulint line) /*!< in: line where locked */ { - struct PSI_mutex_locker* locker = NULL; +#ifdef HAVE_PSI_MUTEX_INTERFACE + struct PSI_mutex_locker* locker; PSI_mutex_locker_state state; - int result = 0; - if (UNIV_LIKELY(PSI_server && fast_mutex->pfs_psi)) { - locker = PSI_server->get_thread_mutex_locker( + locker = PSI_server->get_thread_mutex_locker( &state, fast_mutex->pfs_psi, PSI_MUTEX_LOCK); - if (locker) { - PSI_server->start_mutex_wait(locker, file_name, line); - } + if (UNIV_LIKELY(locker != NULL)) + { + PSI_server->start_mutex_wait(locker, file_name, line); + os_fast_mutex_lock_func(&fast_mutex->mutex); + PSI_server->end_mutex_wait(locker, 0); + return; } +#endif os_fast_mutex_lock_func(&fast_mutex->mutex); - - if (locker) { - PSI_server->end_mutex_wait(locker, result); - } } /**********************************************************//** NOTE! Please use the corresponding macro os_fast_mutex_unlock, not directly @@ -133,9 +133,9 @@ pfs_os_fast_mutex_unlock( /*=====================*/ os_fast_mutex_t* fast_mutex) /*!< in/out: mutex to release */ { - if (UNIV_LIKELY(PSI_server && fast_mutex->pfs_psi)) { - PSI_server->unlock_mutex(fast_mutex->pfs_psi); - } +#ifdef HAVE_PSI_MUTEX_INTERFACE + PSI_server->unlock_mutex(fast_mutex->pfs_psi); +#endif os_fast_mutex_unlock_func(&fast_mutex->mutex); } === modified file 'storage/innobase/include/sync0rw.ic' --- a/storage/innobase/include/sync0rw.ic 2011-04-12 01:21:37 +0000 +++ b/storage/innobase/include/sync0rw.ic 2011-05-04 03:17:46 +0000 @@ -645,10 +645,12 @@ pfs_rw_lock_create_func( const char* cfile_name, /*!< in: file name where created */ ulint cline) /*!< in: file line where created */ { +#ifdef HAVE_PSI_RWLOCK_INTERFACE /* Initialize the rwlock for performance schema */ - lock->pfs_psi = (PSI_server && PFS_IS_INSTRUMENTED(key)) - ? PSI_server->init_rwlock(key, lock) - : NULL; + lock->pfs_psi = PSI_server->init_rwlock(key, lock); +#else + lock->pfs_psi = NULL; +#endif /* The actual function to initialize an rwlock */ rw_lock_create_func(lock, @@ -675,25 +677,24 @@ pfs_rw_lock_x_lock_func( const char* file_name,/*!< in: file name where lock requested */ ulint line) /*!< in: line where requested */ { - struct PSI_rwlock_locker* locker = NULL; +#ifdef HAVE_PSI_RWLOCK_INTERFACE + struct PSI_rwlock_locker* locker; PSI_rwlock_locker_state state; /* Record the entry of rw x lock request in performance schema */ - if (UNIV_LIKELY(PSI_server && lock->pfs_psi)) { - locker = PSI_server->get_thread_rwlock_locker( + locker = PSI_server->get_thread_rwlock_locker( &state, lock->pfs_psi, PSI_RWLOCK_WRITELOCK); - if (locker) { - PSI_server->start_rwlock_wrwait(locker, - file_name, line); - } + if (UNIV_LIKELY(locker != NULL)) + { + PSI_server->start_rwlock_wrwait(locker, file_name, line); + rw_lock_x_lock_func(lock, pass, file_name, line); + PSI_server->end_rwlock_wrwait(locker, 0); + return; } +#endif rw_lock_x_lock_func(lock, pass, file_name, line); - - if (locker) { - PSI_server->end_rwlock_wrwait(locker, 0); - } } /******************************************************************//** Performance schema instrumented wrap function for @@ -710,27 +711,25 @@ pfs_rw_lock_x_lock_func_nowait( requested */ ulint line) /*!< in: line where requested */ { - struct PSI_rwlock_locker* locker = NULL; +#ifdef HAVE_PSI_RWLOCK_INTERFACE + struct PSI_rwlock_locker* locker; PSI_rwlock_locker_state state; ibool ret; /* Record the entry of rw x lock request in performance schema */ - if (UNIV_LIKELY(PSI_server && lock->pfs_psi)) { - locker = PSI_server->get_thread_rwlock_locker( + locker = PSI_server->get_thread_rwlock_locker( &state, lock->pfs_psi, PSI_RWLOCK_WRITELOCK); - if (locker) { - PSI_server->start_rwlock_wrwait(locker, - file_name, line); - } - } - - ret = rw_lock_x_lock_func_nowait(lock, file_name, line); - - if (locker) { + if (UNIV_LIKELY(locker != NULL)) + { + PSI_server->start_rwlock_wrwait(locker, file_name, line); + ret = rw_lock_x_lock_func_nowait(lock, file_name, line); PSI_server->end_rwlock_wrwait(locker, 0); + return(ret); } +#endif + ret = rw_lock_x_lock_func_nowait(lock, file_name, line); return(ret); } /******************************************************************//** @@ -743,10 +742,10 @@ pfs_rw_lock_free_func( /*==================*/ rw_lock_t* lock) /*!< in: pointer to rw-lock */ { - if (UNIV_LIKELY(PSI_server && lock->pfs_psi)) { - PSI_server->destroy_rwlock(lock->pfs_psi); - lock->pfs_psi = NULL; - } +#ifdef HAVE_PSI_RWLOCK_INTERFACE + PSI_server->destroy_rwlock(lock->pfs_psi); +#endif + lock->pfs_psi = NULL; rw_lock_free_func(lock); } @@ -766,24 +765,23 @@ pfs_rw_lock_s_lock_func( requested */ ulint line) /*!< in: line where requested */ { +#ifdef HAVE_PSI_RWLOCK_INTERFACE struct PSI_rwlock_locker* locker = NULL; PSI_rwlock_locker_state state; /* Instrumented to inform we are aquiring a shared rwlock */ - if (UNIV_LIKELY(PSI_server && lock->pfs_psi)) { - locker = PSI_server->get_thread_rwlock_locker( + locker = PSI_server->get_thread_rwlock_locker( &state, lock->pfs_psi, PSI_RWLOCK_READLOCK); - if (locker) { - PSI_server->start_rwlock_rdwait(locker, - file_name, line); - } + if (UNIV_LIKELY(locker != NULL)) + { + PSI_server->start_rwlock_rdwait(locker, file_name, line); + rw_lock_s_lock_func(lock, pass, file_name, line); + PSI_server->end_rwlock_rdwait(locker, 0); + return; } +#endif rw_lock_s_lock_func(lock, pass, file_name, line); - - if (locker) { - PSI_server->end_rwlock_rdwait(locker, 0); - } } /******************************************************************//** Performance schema instrumented wrap function for rw_lock_s_lock_func() @@ -801,26 +799,24 @@ pfs_rw_lock_s_lock_low( const char* file_name, /*!< in: file name where lock requested */ ulint line) /*!< in: line where requested */ { +#ifdef HAVE_PSI_RWLOCK_INTERFACE struct PSI_rwlock_locker* locker = NULL; PSI_rwlock_locker_state state; ibool ret; /* Instrumented to inform we are aquiring a shared rwlock */ - if (UNIV_LIKELY(PSI_server && lock->pfs_psi)) { - locker = PSI_server->get_thread_rwlock_locker( + locker = PSI_server->get_thread_rwlock_locker( &state, lock->pfs_psi, PSI_RWLOCK_READLOCK); - if (locker) { - PSI_server->start_rwlock_rdwait(locker, - file_name, line); - } - } - - ret = rw_lock_s_lock_low(lock, pass, file_name, line); - - if (locker) { + if (UNIV_LIKELY(locker != NULL)) + { + PSI_server->start_rwlock_rdwait(locker, file_name, line); + ret = rw_lock_s_lock_low(lock, pass, file_name, line); PSI_server->end_rwlock_rdwait(locker, 0); + return(ret); } +#endif + ret = rw_lock_s_lock_low(lock, pass, file_name, line); return(ret); } @@ -839,10 +835,10 @@ pfs_rw_lock_x_unlock_func( #endif rw_lock_t* lock) /*!< in/out: rw-lock */ { +#ifdef HAVE_PSI_RWLOCK_INTERFACE /* Inform performance schema we are unlocking the lock */ - if (UNIV_LIKELY(PSI_server && lock->pfs_psi)) { - PSI_server->unlock_rwlock(lock->pfs_psi); - } + PSI_server->unlock_rwlock(lock->pfs_psi); +#endif rw_lock_x_unlock_func( #ifdef UNIV_SYNC_DEBUG @@ -866,10 +862,10 @@ pfs_rw_lock_s_unlock_func( #endif rw_lock_t* lock) /*!< in/out: rw-lock */ { +#ifdef HAVE_PSI_RWLOCK_INTERFACE /* Inform performance schema we are unlocking the lock */ - if (UNIV_LIKELY(PSI_server && lock->pfs_psi)) { - PSI_server->unlock_rwlock(lock->pfs_psi); - } + PSI_server->unlock_rwlock(lock->pfs_psi); +#endif rw_lock_s_unlock_func( #ifdef UNIV_SYNC_DEBUG === modified file 'storage/innobase/include/sync0sync.ic' --- a/storage/innobase/include/sync0sync.ic 2010-10-26 23:14:42 +0000 +++ b/storage/innobase/include/sync0sync.ic 2011-05-04 03:17:46 +0000 @@ -236,23 +236,22 @@ pfs_mutex_enter_func( const char* file_name, /*!< in: file name where locked */ ulint line) /*!< in: line where locked */ { - struct PSI_mutex_locker* locker = NULL; +#ifdef HAVE_PSI_MUTEX_INTERFACE + struct PSI_mutex_locker* locker; PSI_mutex_locker_state state; - int result = 0; - if (UNIV_LIKELY(PSI_server && mutex->pfs_psi)) { - locker = PSI_server->get_thread_mutex_locker( + locker = PSI_server->get_thread_mutex_locker( &state, mutex->pfs_psi, PSI_MUTEX_LOCK); - if (locker) { - PSI_server->start_mutex_wait(locker, file_name, line); - } + if (UNIV_LIKELY(locker != NULL)) + { + PSI_server->start_mutex_wait(locker, file_name, line); + mutex_enter_func(mutex, file_name, line); + PSI_server->end_mutex_wait(locker, 0); + return; } +#endif mutex_enter_func(mutex, file_name, line); - - if (locker) { - PSI_server->end_mutex_wait(locker, result); - } } /********************************************************************//** NOTE! Please use the corresponding macro mutex_enter_nowait(), not directly @@ -270,24 +269,23 @@ pfs_mutex_enter_nowait_func( ulint line) /*!< in: line where requested */ { ulint ret; + +#ifdef HAVE_PSI_MUTEX_INTERFACE struct PSI_mutex_locker* locker = NULL; PSI_mutex_locker_state state; - int result = 0; - if (UNIV_LIKELY(PSI_server && mutex->pfs_psi)) { - locker = PSI_server->get_thread_mutex_locker( + locker = PSI_server->get_thread_mutex_locker( &state, mutex->pfs_psi, PSI_MUTEX_LOCK); - if (locker) { - PSI_server->start_mutex_wait(locker, file_name, line); - } + if (UNIV_LIKELY(locker != NULL)) + { + PSI_server->start_mutex_wait(locker, file_name, line); + ret = mutex_enter_nowait_func(mutex, file_name, line); + PSI_server->end_mutex_wait(locker, 0); + return(ret); } +#endif ret = mutex_enter_nowait_func(mutex, file_name, line); - - if (locker) { - PSI_server->end_mutex_wait(locker, result); - } - return(ret); } /******************************************************************//** @@ -301,9 +299,9 @@ pfs_mutex_exit_func( /*================*/ mutex_t* mutex) /*!< in: pointer to mutex */ { - if (UNIV_LIKELY(PSI_server && mutex->pfs_psi)) { - PSI_server->unlock_mutex(mutex->pfs_psi); - } +#ifdef HAVE_PSI_MUTEX_INTERFACE + PSI_server->unlock_mutex(mutex->pfs_psi); +#endif mutex_exit_func(mutex); } @@ -329,9 +327,11 @@ pfs_mutex_create_func( const char* cfile_name, /*!< in: file name where created */ ulint cline) /*!< in: file line where created */ { - mutex->pfs_psi = (PSI_server && PFS_IS_INSTRUMENTED(key)) - ? PSI_server->init_mutex(key, mutex) - : NULL; +#ifdef HAVE_PSI_MUTEX_INTERFACE + mutex->pfs_psi = PSI_server->init_mutex(key, mutex); +#else + mutex->pfs_psi = NULL; +#endif mutex_create_func(mutex, # ifdef UNIV_DEBUG @@ -354,10 +354,10 @@ pfs_mutex_free_func( /*================*/ mutex_t* mutex) /*!< in: mutex */ { - if (UNIV_LIKELY(PSI_server && mutex->pfs_psi)) { - PSI_server->destroy_mutex(mutex->pfs_psi); - mutex->pfs_psi = NULL; - } +#ifdef HAVE_PSI_MUTEX_INTERFACE + PSI_server->destroy_mutex(mutex->pfs_psi); +#endif + mutex->pfs_psi = NULL; mutex_free_func(mutex); } === modified file 'storage/innobase/include/univ.i' --- a/storage/innobase/include/univ.i 2011-04-27 21:49:19 +0000 +++ b/storage/innobase/include/univ.i 2011-05-04 03:17:46 +0000 @@ -150,7 +150,7 @@ instrumentation even if their correspond define is set. And this PFS_NOT_INSTRUMENTED is used as the key value to identify those objects that would be excluded from instrumentation. */ -# define PFS_NOT_INSTRUMENTED ULINT32_UNDEFINED +# define PFS_NOT_INSTRUMENTED 0 # define PFS_IS_INSTRUMENTED(key) ((key) != PFS_NOT_INSTRUMENTED) === modified file 'storage/perfschema/pfs.cc' --- a/storage/perfschema/pfs.cc 2011-02-14 14:23:55 +0000 +++ b/storage/perfschema/pfs.cc 2011-05-04 03:17:46 +0000 @@ -1352,6 +1352,10 @@ init_mutex_v1(PSI_mutex_key key, const v static void destroy_mutex_v1(PSI_mutex* mutex) { PFS_mutex *pfs= reinterpret_cast (mutex); + + if (unlikely(pfs == NULL)) + return; + destroy_mutex(pfs); } @@ -1372,6 +1376,10 @@ init_rwlock_v1(PSI_rwlock_key key, const static void destroy_rwlock_v1(PSI_rwlock* rwlock) { PFS_rwlock *pfs= reinterpret_cast (rwlock); + + if (unlikely(pfs == NULL)) + return; + destroy_rwlock(pfs); } @@ -1392,6 +1400,10 @@ init_cond_v1(PSI_cond_key key, const voi static void destroy_cond_v1(PSI_cond* cond) { PFS_cond *pfs= reinterpret_cast (cond); + + if (unlikely(pfs == NULL)) + return; + destroy_cond(pfs); } @@ -1879,15 +1891,19 @@ static PSI_mutex_locker* get_thread_mutex_locker_v1(PSI_mutex_locker_state *state, PSI_mutex *mutex, PSI_mutex_operation op) { - PFS_mutex *pfs_mutex= reinterpret_cast (mutex); DBUG_ASSERT((int) op >= 0); DBUG_ASSERT((uint) op < array_elements(mutex_operation_map)); DBUG_ASSERT(state != NULL); - DBUG_ASSERT(pfs_mutex != NULL); - DBUG_ASSERT(pfs_mutex->m_class != NULL); if (! flag_global_instrumentation) return NULL; + + PFS_mutex *pfs_mutex= reinterpret_cast (mutex); + if (unlikely(pfs_mutex == NULL)) + return NULL; + + DBUG_ASSERT(pfs_mutex->m_class != NULL); + PFS_mutex_class *klass= pfs_mutex->m_class; if (! klass->m_enabled) return NULL; @@ -1967,15 +1983,19 @@ static PSI_rwlock_locker* get_thread_rwlock_locker_v1(PSI_rwlock_locker_state *state, PSI_rwlock *rwlock, PSI_rwlock_operation op) { - PFS_rwlock *pfs_rwlock= reinterpret_cast (rwlock); DBUG_ASSERT(static_cast (op) >= 0); DBUG_ASSERT(static_cast (op) < array_elements(rwlock_operation_map)); DBUG_ASSERT(state != NULL); - DBUG_ASSERT(pfs_rwlock != NULL); - DBUG_ASSERT(pfs_rwlock->m_class != NULL); if (! flag_global_instrumentation) return NULL; + + PFS_rwlock *pfs_rwlock= reinterpret_cast (rwlock); + if (unlikely(pfs_rwlock == NULL)) + return NULL; + + DBUG_ASSERT(pfs_rwlock->m_class != NULL); + PFS_rwlock_class *klass= pfs_rwlock->m_class; if (! klass->m_enabled) return NULL; @@ -2067,15 +2087,19 @@ get_thread_cond_locker_v1(PSI_cond_locke this parameter here will be used to adjust the mutex state, in start_cond_wait_v1() and end_cond_wait_v1(). */ - PFS_cond *pfs_cond= reinterpret_cast (cond); DBUG_ASSERT(static_cast (op) >= 0); DBUG_ASSERT(static_cast (op) < array_elements(cond_operation_map)); DBUG_ASSERT(state != NULL); - DBUG_ASSERT(pfs_cond != NULL); - DBUG_ASSERT(pfs_cond->m_class != NULL); if (! flag_global_instrumentation) return NULL; + + PFS_cond *pfs_cond= reinterpret_cast (cond); + if (unlikely(pfs_cond == NULL)) + return NULL; + + DBUG_ASSERT(pfs_cond->m_class != NULL); + PFS_cond_class *klass= pfs_cond->m_class; if (! klass->m_enabled) return NULL; @@ -2205,13 +2229,17 @@ get_thread_table_io_locker_v1(PSI_table_ DBUG_ASSERT(static_cast (op) >= 0); DBUG_ASSERT(static_cast (op) < array_elements(table_io_operation_map)); DBUG_ASSERT(state != NULL); - PFS_table *pfs_table= reinterpret_cast (table); - DBUG_ASSERT(pfs_table != NULL); - DBUG_ASSERT(pfs_table->m_share != NULL); if (! flag_global_instrumentation) return NULL; + PFS_table *pfs_table= reinterpret_cast (table); + + if (unlikely(pfs_table == NULL)) + return NULL; + + DBUG_ASSERT(pfs_table->m_share != NULL); + if (! global_table_io_class.m_enabled) return NULL; @@ -2311,10 +2339,6 @@ get_thread_table_lock_locker_v1(PSI_tabl PSI_table *table, PSI_table_lock_operation op, ulong op_flags) { DBUG_ASSERT(state != NULL); - PFS_table *pfs_table= reinterpret_cast (table); - DBUG_ASSERT(pfs_table != NULL); - DBUG_ASSERT(pfs_table->m_share != NULL); - DBUG_ASSERT((op == PSI_TABLE_LOCK) || (op == PSI_TABLE_EXTERNAL_LOCK)); if (! flag_global_instrumentation) @@ -2323,6 +2347,13 @@ get_thread_table_lock_locker_v1(PSI_tabl if (! global_table_lock_class.m_enabled) return NULL; + PFS_table *pfs_table= reinterpret_cast (table); + + if (unlikely(pfs_table == NULL)) + return NULL; + + DBUG_ASSERT(pfs_table->m_share != NULL); + PFS_table_share *share= pfs_table->m_share; if (unlikely(setup_objects_version != share->m_setup_objects_version)) { @@ -2518,9 +2549,6 @@ static PSI_file_locker* get_thread_file_stream_locker_v1(PSI_file_locker_state *state, PSI_file *file, PSI_file_operation op) { - PFS_file *pfs_file= reinterpret_cast (file); - DBUG_ASSERT(pfs_file != NULL); - DBUG_ASSERT(pfs_file->m_class != NULL); DBUG_ASSERT(static_cast (op) >= 0); DBUG_ASSERT(static_cast (op) < array_elements(file_operation_map)); DBUG_ASSERT(state != NULL); @@ -2528,6 +2556,12 @@ get_thread_file_stream_locker_v1(PSI_fil if (! flag_global_instrumentation) return NULL; + PFS_file *pfs_file= reinterpret_cast (file); + if (unlikely(pfs_file == NULL)) + return NULL; + + DBUG_ASSERT(pfs_file->m_class != NULL); + PFS_file_class *klass= pfs_file->m_class; if (! klass->m_enabled) return NULL; @@ -2708,7 +2742,9 @@ get_thread_file_descriptor_locker_v1(PSI static void unlock_mutex_v1(PSI_mutex *mutex) { PFS_mutex *pfs_mutex= reinterpret_cast (mutex); - DBUG_ASSERT(pfs_mutex != NULL); + + if (unlikely(pfs_mutex == NULL)) + return; /* Note that this code is still protected by the instrumented mutex, @@ -2751,7 +2787,10 @@ static void unlock_mutex_v1(PSI_mutex *m static void unlock_rwlock_v1(PSI_rwlock *rwlock) { PFS_rwlock *pfs_rwlock= reinterpret_cast (rwlock); - DBUG_ASSERT(pfs_rwlock != NULL); + + if (unlikely(pfs_rwlock == NULL)) + return; + bool last_writer= false; bool last_reader= false; @@ -2831,7 +2870,9 @@ static void unlock_rwlock_v1(PSI_rwlock static void signal_cond_v1(PSI_cond* cond) { PFS_cond *pfs_cond= reinterpret_cast (cond); - DBUG_ASSERT(pfs_cond != NULL); + + if (unlikely(pfs_cond == NULL)) + return; pfs_cond->m_cond_stat.m_signal_count++; } @@ -2843,7 +2884,9 @@ static void signal_cond_v1(PSI_cond* con static void broadcast_cond_v1(PSI_cond* cond) { PFS_cond *pfs_cond= reinterpret_cast (cond); - DBUG_ASSERT(pfs_cond != NULL); + + if (unlikely(pfs_cond == NULL)) + return; pfs_cond->m_cond_stat.m_broadcast_count++; } --===============6849154642693999057== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/marc.alff@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: marc.alff@stripped # target_branch: file:///Users/malff/BZR_TREE/mysql-trunk-pfs-tuning/ # testament_sha1: b28c3c7527749c22dd4be7319754c78ecd6718c6 # timestamp: 2011-05-03 21:17:54 -0600 # base_revision_id: marc.alff@stripped\ # 0kc3o5l2lox1j40j # # Begin bundle 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 --===============6849154642693999057==--