summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/my_sys.h1
-rw-r--r--mysys/errors.c16
-rw-r--r--mysys/my_fstream.c6
-rw-r--r--mysys/my_pread.c6
-rw-r--r--mysys/my_write.c6
5 files changed, 22 insertions, 13 deletions
diff --git a/include/my_sys.h b/include/my_sys.h
index 5dc73bf84d9..8031a6934fe 100644
--- a/include/my_sys.h
+++ b/include/my_sys.h
@@ -636,6 +636,7 @@ extern int nt_share_delete(const char *name,myf MyFlags);
extern void TERMINATE(FILE *file);
#endif
extern void init_glob_errs(void);
+extern void wait_for_free_space(const char *filename, int errors);
extern FILE *my_fopen(const char *FileName,int Flags,myf MyFlags);
extern FILE *my_fdopen(File Filedes,const char *name, int Flags,myf MyFlags);
extern int my_fclose(FILE *fd,myf MyFlags);
diff --git a/mysys/errors.c b/mysys/errors.c
index 1c13255a616..92eb2be6708 100644
--- a/mysys/errors.c
+++ b/mysys/errors.c
@@ -39,7 +39,7 @@ const char * NEAR globerrs[GLOBERRS]=
"Can't change dir to '%s' (Errcode: %d)",
"Warning: '%s' had %d links",
"%d files and %d streams is left open\n",
- "Disk is full writing '%s' (Errcode: %d). Waiting for someone to free space... Retry in %d secs",
+ "Disk is full writing '%s' (Errcode: %d). Waiting for someone to free space... (Expect up to %d secs delay for server to continue after freeing disk space)",
"Can't create directory '%s' (Errcode: %d)",
"Character set '%s' is not a compiled character set and is not specified in the '%s' file",
"Out of resources when opening file '%s' (Errcode: %d)",
@@ -90,3 +90,17 @@ void init_glob_errs()
EE(EE_FILENOTFOUND) = "File '%s' not found (Errcode: %d)";
}
#endif
+
+void wait_for_free_space(const char *filename, int errors)
+{
+ if (errors == 0)
+ my_error(EE_DISK_FULL,MYF(ME_BELL | ME_NOREFRESH),
+ filename,my_errno,MY_WAIT_FOR_USER_TO_FIX_PANIC);
+ if (!(errors % MY_WAIT_GIVE_USER_A_MESSAGE))
+ my_printf_error(EE_DISK_FULL,
+ "Retry in %d secs. Message reprinted in %d secs",
+ MYF(ME_BELL | ME_NOREFRESH),
+ MY_WAIT_FOR_USER_TO_FIX_PANIC,
+ MY_WAIT_GIVE_USER_A_MESSAGE * MY_WAIT_FOR_USER_TO_FIX_PANIC );
+ VOID(sleep(MY_WAIT_FOR_USER_TO_FIX_PANIC));
+}
diff --git a/mysys/my_fstream.c b/mysys/my_fstream.c
index ea30509ca8c..38b27bce100 100644
--- a/mysys/my_fstream.c
+++ b/mysys/my_fstream.c
@@ -116,10 +116,8 @@ uint my_fwrite(FILE *stream, const byte *Buffer, uint Count, myf MyFlags)
if ((errno == ENOSPC || errno == EDQUOT) &&
(MyFlags & MY_WAIT_IF_FULL))
{
- if (!(errors++ % MY_WAIT_GIVE_USER_A_MESSAGE))
- my_error(EE_DISK_FULL,MYF(ME_BELL | ME_NOREFRESH),
- "[stream]",my_errno,MY_WAIT_FOR_USER_TO_FIX_PANIC);
- VOID(sleep(MY_WAIT_FOR_USER_TO_FIX_PANIC));
+ wait_for_free_space("[stream]", errors);
+ errors++;
VOID(my_fseek(stream,seekptr,MY_SEEK_SET,MYF(0)));
continue;
}
diff --git a/mysys/my_pread.c b/mysys/my_pread.c
index 2d42a6ebbc4..d5bb29ff6a4 100644
--- a/mysys/my_pread.c
+++ b/mysys/my_pread.c
@@ -121,10 +121,8 @@ uint my_pwrite(int Filedes, const byte *Buffer, uint Count, my_off_t offset,
if ((my_errno == ENOSPC || my_errno == EDQUOT) &&
(MyFlags & MY_WAIT_IF_FULL))
{
- if (!(errors++ % MY_WAIT_GIVE_USER_A_MESSAGE))
- my_error(EE_DISK_FULL,MYF(ME_BELL | ME_NOREFRESH),
- my_filename(Filedes),my_errno,MY_WAIT_FOR_USER_TO_FIX_PANIC);
- VOID(sleep(MY_WAIT_FOR_USER_TO_FIX_PANIC));
+ wait_for_free_space(my_filename(Filedes), errors);
+ errors++;
continue;
}
if ((writenbytes > 0 && (uint) writenbytes != (uint) -1) ||
diff --git a/mysys/my_write.c b/mysys/my_write.c
index 9ff7babab31..4df7e75b953 100644
--- a/mysys/my_write.c
+++ b/mysys/my_write.c
@@ -54,10 +54,8 @@ uint my_write(int Filedes, const byte *Buffer, uint Count, myf MyFlags)
if ((my_errno == ENOSPC || my_errno == EDQUOT) &&
(MyFlags & MY_WAIT_IF_FULL))
{
- if (!(errors++ % MY_WAIT_GIVE_USER_A_MESSAGE))
- my_error(EE_DISK_FULL,MYF(ME_BELL | ME_NOREFRESH),
- my_filename(Filedes),my_errno,MY_WAIT_FOR_USER_TO_FIX_PANIC);
- VOID(sleep(MY_WAIT_FOR_USER_TO_FIX_PANIC));
+ wait_for_free_space(my_filename(Filedes), errors);
+ errors++;
continue;
}