diff options
author | unknown <monty@mysql.com> | 2003-11-02 15:55:02 +0200 |
---|---|---|
committer | unknown <monty@mysql.com> | 2003-11-02 15:55:02 +0200 |
commit | c97a38c4d3b2afd4c93771fca61eede965fe71cf (patch) | |
tree | cb9bb7181d68f8c4f3d892367e08536d2f609a19 | |
parent | 116cf0102464ce330a758fa3bec2239bfc5872d5 (diff) | |
download | mariadb-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
-rw-r--r-- | BitKeeper/etc/logging_ok | 1 | ||||
-rw-r--r-- | VC++Files/mysys/mysys.dsp | 4 | ||||
-rw-r--r-- | configure.in | 2 | ||||
-rw-r--r-- | include/my_sys.h | 1 | ||||
-rw-r--r-- | include/mysys_err.h | 3 | ||||
-rw-r--r-- | isam/extra.c | 10 | ||||
-rw-r--r-- | myisam/mi_extra.c | 20 | ||||
-rw-r--r-- | myisam/mi_locking.c | 20 | ||||
-rw-r--r-- | mysql-test/mysql-test-run.sh | 3 | ||||
-rw-r--r-- | mysys/Makefile.am | 2 | ||||
-rw-r--r-- | mysys/errors.c | 8 | ||||
-rw-r--r-- | mysys/my_symlink.c | 3 | ||||
-rw-r--r-- | mysys/my_sync.c | 60 | ||||
-rw-r--r-- | mysys/thr_alarm.c | 7 | ||||
-rw-r--r-- | sql/unireg.cc | 9 |
15 files changed, 105 insertions, 48 deletions
diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index afb9c5cff5c..f642821747f 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -66,6 +66,7 @@ monty@hundin.mysql.fi monty@mashka.(none) monty@mashka.mysql.fi monty@mishka.mysql.fi +monty@mysql.com monty@narttu. monty@narttu.mysql.fi monty@rescue. diff --git a/VC++Files/mysys/mysys.dsp b/VC++Files/mysys/mysys.dsp index 695e2cb2638..b410d0a7465 100644 --- a/VC++Files/mysys/mysys.dsp +++ b/VC++Files/mysys/mysys.dsp @@ -426,6 +426,10 @@ SOURCE=.\my_symlink2.c # End Source File # Begin Source File +SOURCE=.\my_sync.c +# End Source File +# Begin Source File + SOURCE=.\my_tempnam.c # End Source File # Begin Source File diff --git a/configure.in b/configure.in index 02825ce1424..a4fe75ce896 100644 --- a/configure.in +++ b/configure.in @@ -1817,7 +1817,7 @@ AC_CHECK_FUNCS(alarm bmove \ pthread_attr_create pthread_getsequence_np pthread_attr_setstacksize \ pthread_attr_getstacksize \ pthread_condattr_create rwlock_init pthread_rwlock_rdlock \ - fchmod getpass getpassphrase initgroups mlockall) + fsync fdatasync fchmod getpass getpassphrase initgroups mlockall) CFLAGS="$ORG_CFLAGS" diff --git a/include/my_sys.h b/include/my_sys.h index 7a3d22f3304..df8b9759e5d 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -566,6 +566,7 @@ 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); extern int my_chsize(File fd,my_off_t newlength, int filler, myf MyFlags); +extern int my_sync(File fd, myf my_flags); extern int my_error _VARARGS((int nr,myf MyFlags, ...)); extern int my_printf_error _VARARGS((uint my_err, const char *format, myf MyFlags, ...) diff --git a/include/mysys_err.h b/include/mysys_err.h index a86765c74fd..0ee89e91ee4 100644 --- a/include/mysys_err.h +++ b/include/mysys_err.h @@ -21,7 +21,7 @@ extern "C" { #endif #define GLOB 0 /* Error maps */ -#define GLOBERRS 27 /* Max number of error messages in map's */ +#define GLOBERRS 28 /* Max number of error messages in map's */ #define EE(X) globerrs[ X ] /* Defines to add error to right map */ extern const char * NEAR globerrs[]; /* my_error_messages is here */ @@ -53,6 +53,7 @@ extern const char * NEAR globerrs[]; /* my_error_messages is here */ #define EE_CANT_READLINK 24 #define EE_CANT_SYMLINK 25 #define EE_REALPATH 26 +#define EE_SYNC 27 /* exit codes for all MySQL programs */ diff --git a/isam/extra.c b/isam/extra.c index e2f13532ddf..3bf1dd012ed 100644 --- a/isam/extra.c +++ b/isam/extra.c @@ -250,17 +250,15 @@ int nisam_extra(N_INFO *info, enum ha_extra_function function) pthread_mutex_unlock(&THR_LOCK_isam); break; case HA_EXTRA_FLUSH: -#ifdef __WIN__ if (info->s->not_flushed) { info->s->not_flushed=0; - if (_commit(info->s->kfile)) - error=errno; - if (_commit(info->dfile)) - error=errno; + if (my_sync(info->s->kfile, MYF(0))) + error= my_errno; + if (my_sync(info->dfile, MYF(0))) + error= my_errno; } break; -#endif case HA_EXTRA_NORMAL: /* Theese isn't in use */ case HA_EXTRA_QUICK: case HA_EXTRA_KEY_CACHE: diff --git a/myisam/mi_extra.c b/myisam/mi_extra.c index ef82a6ef61f..1d45fd300e7 100644 --- a/myisam/mi_extra.c +++ b/myisam/mi_extra.c @@ -336,22 +336,10 @@ int mi_extra(MI_INFO *info, enum ha_extra_function function, void *extra_arg) if (share->not_flushed) { share->not_flushed=0; -#if defined(__WIN__) - if (_commit(share->kfile)) - error=errno; - if (_commit(info->dfile)) - error=errno; -#elif defined(HAVE_FDATASYNC) - if (fdatasync(share->kfile)) - error=errno; - if (fdatasync(share->dfile)) - error=errno; -#elif defined(HAVE_FSYNC) - if ( fsync(share->kfile)) - error=errno; - if (fsync(share->dfile)) - error=errno; -#endif + if (my_sync(share->kfile, MYF(0))) + error= my_errno; + if (my_sync(info->dfile, MYF(0))) + error= my_errno; if (error) { share->changed=1; diff --git a/myisam/mi_locking.c b/myisam/mi_locking.c index a707eb294a9..f3bfa8deb90 100644 --- a/myisam/mi_locking.c +++ b/myisam/mi_locking.c @@ -88,22 +88,10 @@ int mi_lock_database(MI_INFO *info, int lock_type) share->changed=0; if (myisam_flush) { -#if defined(__WIN__) - if (_commit(share->kfile)) - error=errno; - if (_commit(info->dfile)) - error=errno; -#elif defined(HAVE_FDATASYNC) - if (fdatasync(share->kfile)) - error=errno; - if (fdatasync(share->dfile)) - error=errno; -#elif defined(HAVE_FSYNC) - if (fsync(share->kfile)) - error=errno; - if (fsync(share->dfile)) - error=errno; -#endif + if (my_sync(share->kfile, MYF(0))) + error= my_errno; + if (my_sync(info->dfile, MYF(0))) + error= my_errno; } else share->not_flushed=1; diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh index cd409e1ace5..a298701dc7f 100644 --- a/mysql-test/mysql-test-run.sh +++ b/mysql-test/mysql-test-run.sh @@ -353,6 +353,9 @@ while test $# -gt 0; do TMP=`$ECHO "$1" | $SED -e "s;--valgrind-options=;;"` VALGRIND="$VALGRIND $TMP" ;; + --valgrind-all) + VALGRIND="$VALGRIND -v --show-reachable=yes" + ;; --skip-*) EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT $1" EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT $1" 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 */ diff --git a/sql/unireg.cc b/sql/unireg.cc index 5183f471fa2..ff42bfae0f0 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -150,16 +150,19 @@ int rea_create_table(my_string file_name, my_free((gptr) screen_buff,MYF(0)); my_afree((gptr) keybuff); - VOID(my_close(file,MYF(MY_WME))); - if (ha_create_table(file_name,create_info,0)) + if (my_sync(file, MYF(MY_WME))) goto err2; + if (my_close(file,MYF(MY_WME)) || + ha_create_table(file_name,create_info,0)) + goto err3; DBUG_RETURN(0); err: my_free((gptr) screen_buff,MYF(0)); my_afree((gptr) keybuff); +err2: VOID(my_close(file,MYF(MY_WME))); - err2: +err3: my_delete(file_name,MYF(0)); DBUG_RETURN(1); } /* rea_create_table */ |