summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@metal.(none)>2010-05-02 15:05:34 +0200
committerantirez <antirez@metal.(none)>2010-05-02 15:05:34 +0200
commit10ce12761a9971512e0702c73434bcef0f212e7d (patch)
treeba41dcc9616795517aea72c5a07349f22256bc93
parent7aaaad507060b131ff18d4637ea63499828076d6 (diff)
downloadredis-10ce12761a9971512e0702c73434bcef0f212e7d.tar.gz
On Linux now fdatasync() is used insetad of fsync() in order to flush the AOF file kernel buffers
-rw-r--r--config.h7
-rw-r--r--fmacros.h2
-rw-r--r--redis.c8
3 files changed, 12 insertions, 5 deletions
diff --git a/config.h b/config.h
index 754d3aa86..6e98fbb2c 100644
--- a/config.h
+++ b/config.h
@@ -35,4 +35,11 @@
#define HAVE_KQUEUE 1
#endif
+/* define aof_fsync to fdatasync() in Linux and fsync() for all the rest */
+#ifdef __linux__
+#define aof_fsync fdatasync
+#else
+#define aof_fsync fsync
+#endif
+
#endif
diff --git a/fmacros.h b/fmacros.h
index 986776f22..405be20aa 100644
--- a/fmacros.h
+++ b/fmacros.h
@@ -2,7 +2,7 @@
#define _REDIS_FMACRO_H
#define _BSD_SOURCE
-#define _XOPEN_SOURCE
+#define _XOPEN_SOURCE 700
#define _LARGEFILE_SOURCE
#define _FILE_OFFSET_BITS 64
diff --git a/redis.c b/redis.c
index 78f5fac01..05f1c64a4 100644
--- a/redis.c
+++ b/redis.c
@@ -37,8 +37,6 @@
#include <string.h>
#include <time.h>
#include <unistd.h>
-#define __USE_POSIX199309
-#define __USE_UNIX98
#include <signal.h>
#ifdef HAVE_BACKTRACE
@@ -4049,7 +4047,7 @@ static void echoCommand(redisClient *c) {
static void setGenericCommand(redisClient *c, int nx, robj *key, robj *val, robj *expire) {
int retval;
- long seconds;
+ long seconds = 0; /* initialized to avoid an harmness warning */
if (expire) {
if (getLongFromObjectOrReply(c, expire, &seconds, NULL) != REDIS_OK)
@@ -8090,7 +8088,9 @@ static void feedAppendOnlyFile(struct redisCommand *cmd, int dictid, robj **argv
(server.appendfsync == APPENDFSYNC_EVERYSEC &&
now-server.lastfsync > 1))
{
- fsync(server.appendfd); /* Let's try to get this data on the disk */
+ /* aof_fsync is defined as fdatasync() for Linux in order to avoid
+ * flushing metadata. */
+ aof_fsync(server.appendfd); /* Let's try to get this data on the disk */
server.lastfsync = now;
}
}