diff --git a/storage/innodb_plugin/row/row0merge.c b/storage/innodb_plugin/row/row0merge.c index 204fecbba75..63e14e6568f 100644 --- a/storage/innodb_plugin/row/row0merge.c +++ b/storage/innodb_plugin/row/row0merge.c @@ -2642,6 +2642,14 @@ row_merge_build_indexes( block_size = 3 * sizeof *block; block = os_mem_alloc_large(&block_size); + /* Initialize all the merge file descriptors, so that we + don't call row_merge_file_destroy() on uninitialized + merge file descriptor */ + + for (i = 0; i < n_indexes; i++) { + merge_files[i].fd = -1; + } + for (i = 0; i < n_indexes; i++) { if (row_merge_file_create(&merge_files[i]) < 0) @@ -2699,7 +2707,9 @@ row_merge_build_indexes( } func_exit: - close(tmpfd); + if (tmpfd >= 0) { + close(tmpfd); + } for (i = 0; i < n_indexes; i++) { row_merge_file_destroy(&merge_files[i]);