diff --git a/storage/innobase/row/row0merge.c b/storage/innobase/row/row0merge.c index 0c68d6477a4..9827141caec 100644 --- a/storage/innobase/row/row0merge.c +++ b/storage/innobase/row/row0merge.c @@ -2158,13 +2158,15 @@ row_merge_drop_temp_indexes(void) } /*********************************************************************//** -Create a merge file. */ -static -void -row_merge_file_create( -/*==================*/ - merge_file_t* merge_file) /*!< out: merge file structure */ +Creates temperary merge files, and if UNIV_PFS_IO defined, register +the file descriptor with Performance Schema. +@return File descriptor */ +UNIV_INLINE +int +row_merge_file_create_low(void) +/*===========================*/ { + int fd; #ifdef UNIV_PFS_IO /* This temp file open does not go through normal file APIs, add instrumentation to register with @@ -2176,14 +2178,46 @@ row_merge_file_create( "Innodb Merge Temp File", __FILE__, __LINE__); #endif - merge_file->fd = innobase_mysql_tmpfile(); + fd = innobase_mysql_tmpfile(); +#ifdef UNIV_PFS_IO + register_pfs_file_open_end(locker, fd); +#endif + return(fd); +} +/*********************************************************************//** +Create a merge file. */ +static +void +row_merge_file_create( +/*==================*/ + merge_file_t* merge_file) /*!< out: merge file structure */ +{ + merge_file->fd = row_merge_file_create_low(); merge_file->offset = 0; merge_file->n_rec = 0; -#ifdef UNIV_PFS_IO - register_pfs_file_open_end(locker, merge_file->fd); -#endif } +/*********************************************************************//** +Destroy a merge file. And de-register the file from Performance Schema +if UNIV_PFS_IO is defined. */ +UNIV_INLINE +void +row_merge_file_destroy_low( +/*=======================*/ + int fd) /*!< in: merge file descriptor */ +{ +#ifdef UNIV_PFS_IO + struct PSI_file_locker* locker = NULL; + PSI_file_locker_state state; + register_pfs_file_io_begin(&state, locker, + fd, 0, PSI_FILE_CLOSE, + __FILE__, __LINE__); +#endif + close(fd); +#ifdef UNIV_PFS_IO + register_pfs_file_io_end(locker, 0); +#endif +} /*********************************************************************//** Destroy a merge file. */ static @@ -2192,20 +2226,10 @@ row_merge_file_destroy( /*===================*/ merge_file_t* merge_file) /*!< out: merge file structure */ { -#ifdef UNIV_PFS_IO - struct PSI_file_locker* locker = NULL; - PSI_file_locker_state state; - register_pfs_file_io_begin(&state, locker, merge_file->fd, 0, PSI_FILE_CLOSE, - __FILE__, __LINE__); -#endif if (merge_file->fd != -1) { - close(merge_file->fd); + row_merge_file_destroy_low(merge_file->fd); merge_file->fd = -1; } - -#ifdef UNIV_PFS_IO - register_pfs_file_io_end(locker, 0); -#endif } /*********************************************************************//** @@ -2600,7 +2624,7 @@ row_merge_build_indexes( row_merge_file_create(&merge_files[i]); } - tmpfd = innobase_mysql_tmpfile(); + tmpfd = row_merge_file_create_low(); /* Reset the MySQL row buffer that is used when reporting duplicate keys. */ @@ -2642,7 +2666,7 @@ row_merge_build_indexes( } func_exit: - close(tmpfd); + row_merge_file_destroy_low(tmpfd); for (i = 0; i < n_indexes; i++) { row_merge_file_destroy(&merge_files[i]);