summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2018-05-19 10:07:21 +0200
committerVladislav Vaintroub <wlad@mariadb.com>2018-05-21 16:12:04 +0000
commita5fb0fa32976a5365bbc10a302b98677d86a14cb (patch)
treec3c984de419ac82e4fe277d3a97027d9900327c6
parent59785df59f6468f6de007550c99a798491699a44 (diff)
downloadmariadb-git-a5fb0fa32976a5365bbc10a302b98677d86a14cb.tar.gz
bugfix: EE_OPEN_WARNING could be statistically wrong
don't rely on imprecise my_file_opened | my_stream_opened, scan the array for open handles instead. also, remove my_print_open_files() and embed it in my_end() to have one array scan instead of two.
-rw-r--r--include/my_sys.h6
-rw-r--r--mysys/my_init.c26
-rw-r--r--mysys/my_open.c23
3 files changed, 21 insertions, 34 deletions
diff --git a/include/my_sys.h b/include/my_sys.h
index c64147c5e68..13ab7b12320 100644
--- a/include/my_sys.h
+++ b/include/my_sys.h
@@ -734,12 +734,6 @@ void my_create_backup_name(char *to, const char *from,
extern int my_copystat(const char *from, const char *to, int MyFlags);
extern char * my_filename(File fd);
-#ifdef EXTRA_DEBUG
-void my_print_open_files(void);
-#else
-#define my_print_open_files()
-#endif
-
extern my_bool init_tmpdir(MY_TMPDIR *tmpdir, const char *pathlist);
extern char *my_tmpdir(MY_TMPDIR *tmpdir);
extern void free_tmpdir(MY_TMPDIR *tmpdir);
diff --git a/mysys/my_init.c b/mysys/my_init.c
index aebcb3c1b8a..972750da0ff 100644
--- a/mysys/my_init.c
+++ b/mysys/my_init.c
@@ -158,17 +158,33 @@ void my_end(int infoflag)
}
if ((infoflag & MY_CHECK_ERROR) || print_info)
+ { /* Test if some file is left open */
+ char ebuff[512];
+ uint i, open_files, open_streams;
- { /* Test if some file is left open */
- if (my_file_opened | my_stream_opened)
+ for (open_streams= open_files= i= 0 ; i < my_file_limit ; i++)
+ {
+ if (my_file_info[i].type == UNOPEN)
+ continue;
+ if (my_file_info[i].type == STREAM_BY_FOPEN ||
+ my_file_info[i].type == STREAM_BY_FDOPEN)
+ open_streams++;
+ else
+ open_files++;
+
+#ifdef EXTRA_DEBUG
+ fprintf(stderr, EE(EE_FILE_NOT_CLOSED), my_file_info[i].name, i);
+ fputc('\n', stderr);
+#endif
+ }
+ if (open_files || open_streams)
{
- char ebuff[512];
my_snprintf(ebuff, sizeof(ebuff), EE(EE_OPEN_WARNING),
- my_file_opened, my_stream_opened);
+ open_files, open_streams);
my_message_stderr(EE_OPEN_WARNING, ebuff, ME_BELL);
DBUG_PRINT("error", ("%s", ebuff));
- my_print_open_files();
}
+
#ifdef CHECK_UNLIKELY
end_my_likely(info_file);
#endif
diff --git a/mysys/my_open.c b/mysys/my_open.c
index 6fc8f6d07fc..54e53089da9 100644
--- a/mysys/my_open.c
+++ b/mysys/my_open.c
@@ -161,26 +161,3 @@ File my_register_filename(File fd, const char *FileName, enum file_type
}
DBUG_RETURN(-1);
}
-
-
-
-
-#ifdef EXTRA_DEBUG
-
-void my_print_open_files(void)
-{
- if (my_file_opened | my_stream_opened)
- {
- uint i;
- for (i= 0 ; i < my_file_limit ; i++)
- {
- if (my_file_info[i].type != UNOPEN)
- {
- fprintf(stderr, EE(EE_FILE_NOT_CLOSED), my_file_info[i].name, i);
- fputc('\n', stderr);
- }
- }
- }
-}
-
-#endif