X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/8f61a72fa8912968cb7fd21a5fae36de7ffab790..5bae401107b73b7cfa9cf5e4f1dc518f3687da7d:/src/redis.c diff --git a/src/redis.c b/src/redis.c index 8662191f..ed3e8841 100644 --- a/src/redis.c +++ b/src/redis.c @@ -697,6 +697,11 @@ int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) { } } + + /* If we postponed an AOF buffer flush, let's try to do it every time the + * cron function is called. */ + if (server.aof_flush_postponed_start) flushAppendOnlyFile(0); + /* Expire a few keys per cycle, only if this is a master. * On slaves we wait for DEL operations synthesized by the master * in order to guarantee a strict consistency. */ @@ -735,7 +740,7 @@ void beforeSleep(struct aeEventLoop *eventLoop) { } /* Write the AOF buffer on disk */ - flushAppendOnlyFile(); + flushAppendOnlyFile(0); } /* =========================== Server initialization ======================== */ @@ -822,6 +827,7 @@ void initServerConfig() { server.lastfsync = time(NULL); server.appendfd = -1; server.appendseldb = -1; /* Make sure the first time will not match */ + server.aof_flush_postponed_start = 0; server.pidfile = zstrdup("/var/run/redis.pid"); server.dbfilename = zstrdup("dump.rdb"); server.appendfilename = zstrdup("appendonly.aof"); @@ -905,7 +911,8 @@ void initServer() { if (server.port != 0) { server.ipfd = anetTcpServer(server.neterr,server.port,server.bindaddr); if (server.ipfd == ANET_ERR) { - redisLog(REDIS_WARNING, "Opening port: %s", server.neterr); + redisLog(REDIS_WARNING, "Opening port %d: %s", + server.port, server.neterr); exit(1); } } @@ -1025,9 +1032,9 @@ void call(redisClient *c) { slowlogPushEntryIfNeeded(c->argv,c->argc,duration); c->cmd->calls++; - if (server.appendonly && dirty) + if (server.appendonly && dirty > 0) feedAppendOnlyFile(c->cmd,c->db->id,c->argv,c->argc); - if ((dirty || c->cmd->flags & REDIS_CMD_FORCE_REPLICATION) && + if ((dirty > 0 || c->cmd->flags & REDIS_CMD_FORCE_REPLICATION) && listLength(server.slaves)) replicationFeedSlaves(server.slaves,c->db->id,c->argv,c->argc); if (listLength(server.monitors)) @@ -1729,6 +1736,7 @@ void redisAsciiArt(void) { int main(int argc, char **argv) { long long start; + zmalloc_enable_thread_safeness(); initServerConfig(); if (argc == 2) { if (strcmp(argv[1], "-v") == 0 || @@ -1776,8 +1784,10 @@ static void *getMcontextEip(ucontext_t *uc) { #elif defined(__APPLE__) && !defined(MAC_OS_X_VERSION_10_6) #if __x86_64__ return (void*) uc->uc_mcontext->__ss.__rip; - #else + #elif __i386__ return (void*) uc->uc_mcontext->__ss.__eip; + #else + return (void*) uc->uc_mcontext->__ss.__srr0; #endif #elif defined(__APPLE__) && defined(MAC_OS_X_VERSION_10_6) #if defined(_STRUCT_X86_THREAD_STATE64) && !defined(__i386__)