summaryrefslogtreecommitdiff
path: root/mysys
diff options
context:
space:
mode:
authorunknown <monty@mysql.com>2003-11-02 15:55:02 +0200
committerunknown <monty@mysql.com>2003-11-02 15:55:02 +0200
commitc97a38c4d3b2afd4c93771fca61eede965fe71cf (patch)
treecb9bb7181d68f8c4f3d892367e08536d2f609a19 /mysys
parent116cf0102464ce330a758fa3bec2239bfc5872d5 (diff)
downloadmariadb-git-c97a38c4d3b2afd4c93771fca61eede965fe71cf.tar.gz
Call my_sync() after all data is written to .frm file
Added my_sync() to mysys which will do fsync/fdatasync/_commit() on a file. VC++Files/mysys/mysys.dsp: Added my_sync.c configure.in: Added testing of fsync and fdatasync include/my_sys.h: Added my_sync() include/mysys_err.h: Added my_sync() isam/extra.c: Added my_sync() myisam/mi_extra.c: Added my_sync() myisam/mi_locking.c: Added my_sync() mysql-test/mysql-test-run.sh: Added option --valgrind-all mysys/Makefile.am: Added my_sync.c mysys/errors.c: Added my_sync() mysys/my_symlink.c: Removed compiler warning mysys/thr_alarm.c: Fix for link error on windows sql/unireg.cc: Call my_sync() after all data is written to .frm file BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted
Diffstat (limited to 'mysys')
-rw-r--r--mysys/Makefile.am2
-rw-r--r--mysys/errors.c8
-rw-r--r--mysys/my_symlink.c3
-rw-r--r--mysys/my_sync.c60
-rw-r--r--mysys/thr_alarm.c7
5 files changed, 75 insertions, 5 deletions
diff --git a/mysys/Makefile.am b/mysys/Makefile.am
index a927fa5e3a0..5dc54817fd7 100644
--- a/mysys/Makefile.am
+++ b/mysys/Makefile.am
@@ -47,7 +47,7 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c\
my_delete.c my_rename.c my_redel.c my_tempnam.c \
my_chsize.c my_lread.c my_lwrite.c my_clock.c \
my_quick.c my_lockmem.c my_static.c \
- my_getopt.c my_mkdir.c \
+ my_sync.c my_getopt.c my_mkdir.c \
default.c my_compress.c checksum.c raid.cc \
my_net.c my_semaphore.c my_port.c my_sleep.c \
my_vsnprintf.c charset.c my_bitmap.c my_bit.c md5.c \
diff --git a/mysys/errors.c b/mysys/errors.c
index 8a120e0e869..7d755718b16 100644
--- a/mysys/errors.c
+++ b/mysys/errors.c
@@ -48,6 +48,7 @@ const char * NEAR globerrs[GLOBERRS]=
"Can't read value for symlink '%s' (Error %d)",
"Can't create symlink '%s' pointing at '%s' (Error %d)",
"Error on realpath() on '%s' (Error %d)",
+ "Can't sync file '%s' to disk (Errcode: %d)",
};
void init_glob_errs(void)
@@ -84,8 +85,9 @@ void init_glob_errs()
EE(EE_CANT_MKDIR) ="Can't create directory '%s' (Errcode: %d)";
EE(EE_UNKNOWN_CHARSET)= "Character set is not a compiled character set and is not specified in the %s file";
EE(EE_OUT_OF_FILERESOURCES)="Out of resources when opening file '%s' (Errcode: %d)";
- EE(EE_CANT_READLINK)="Can't read value for symlink '%s' (Error %d)";
- EE(EE_CANT_SYMLINK)="Can't create symlink '%s' pointing at '%s' (Error %d)";
- EE(EE_REALPATH)="Error on realpath() on '%s' (Error %d)";
+ EE(EE_CANT_READLINK)= "Can't read value for symlink '%s' (Error %d)";
+ EE(EE_CANT_SYMLINK)= "Can't create symlink '%s' pointing at '%s' (Error %d)";
+ EE(EE_REALPATH)= "Error on realpath() on '%s' (Error %d)";
+ EE(EE_SYNC)= "Can't sync file '%s' to disk (Errcode: %d)";
}
#endif
diff --git a/mysys/my_symlink.c b/mysys/my_symlink.c
index e287930ff06..abef0096e28 100644
--- a/mysys/my_symlink.c
+++ b/mysys/my_symlink.c
@@ -103,7 +103,8 @@ int my_symlink(const char *content, const char *linkname, myf MyFlags)
#define BUFF_LEN FN_LEN
#endif
-int my_realpath(char *to, const char *filename, myf MyFlags)
+int my_realpath(char *to, const char *filename,
+ myf MyFlags __attribute__((unused)))
{
#if defined(HAVE_REALPATH) && !defined(HAVE_purify) && !defined(HAVE_BROKEN_REALPATH)
int result=0;
diff --git a/mysys/my_sync.c b/mysys/my_sync.c
new file mode 100644
index 00000000000..317ca039346
--- /dev/null
+++ b/mysys/my_sync.c
@@ -0,0 +1,60 @@
+/* Copyright (C) 2003 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#include "mysys_priv.h"
+#include "mysys_err.h"
+#include <errno.h>
+
+/*
+ Sync data in file to disk
+
+ SYNOPSIS
+ my_sync()
+ fd File descritor to sync
+ my_flags Flags (now only MY_WME is supported)
+
+ NOTE
+ If file system supports its, only file data is synced, not inode date
+
+ RETURN
+ 0 ok
+ -1 error
+*/
+
+int my_sync(File fd, myf my_flags)
+{
+ int res;
+ DBUG_ENTER("my_sync");
+ DBUG_PRINT("my",("Fd: %d my_flags: %d", fd, my_flags));
+
+#if defined(HAVE_FDATASYNC)
+ res= fdatasync(fd);
+#elif defined(HAVE_FSYNC)
+ res=fsync(fd);
+#elif defined(__WIN__)
+ res= _commit(fd);
+#else
+ res= 0; /* No sync (strange OS) */
+#endif
+ if (res)
+ {
+ if (!(my_errno= errno))
+ my_errno= -1; /* Unknown error */
+ if (my_flags & MY_WME)
+ my_error(EE_SYNC, MYF(ME_BELL+ME_WAITTANG), my_filename(fd), my_errno);
+ }
+ DBUG_RETURN(res);
+} /* my_read */
diff --git a/mysys/thr_alarm.c b/mysys/thr_alarm.c
index 36bbac16fef..bf40ffc5b4d 100644
--- a/mysys/thr_alarm.c
+++ b/mysys/thr_alarm.c
@@ -714,6 +714,9 @@ void thr_alarm_info(ALARM_INFO *info)
bzero((char*) info, sizeof(*info));
}
+void resize_thr_alarm(uint max_alarms)
+{
+}
/*****************************************************************************
thr_alarm for win95
@@ -793,6 +796,10 @@ void thr_alarm_info(ALARM_INFO *info)
bzero((char*) info, sizeof(*info));
}
+void resize_thr_alarm(uint max_alarms)
+{
+}
+
#endif /* __WIN__ */
#endif /* THREAD */