diff options
author | antirez <antirez@gmail.com> | 2018-07-04 16:50:22 +0200 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2018-07-04 16:50:22 +0200 |
commit | cb78c84235ab50f03a83b0ad4c3ce168b7e48020 (patch) | |
tree | 6c01eed4f76675350e762b8f964f8c1e027f6237 /src/server.c | |
parent | 81778d91bf5a0007dc44293e983c7e36dfd7cc51 (diff) | |
download | redis-cb78c84235ab50f03a83b0ad4c3ce168b7e48020.tar.gz |
Use nolocks_localtime() for safer logging.localtime
Diffstat (limited to 'src/server.c')
-rw-r--r-- | src/server.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/server.c b/src/server.c index 2c9324006..41edab91d 100644 --- a/src/server.c +++ b/src/server.c @@ -326,6 +326,10 @@ struct redisCommand redisCommandTable[] = { /*============================ Utility functions ============================ */ +/* We use a private localtime implementation which is fork-safe. The logging + * function of Redis may be called from other threads. */ +void nolocks_localtime(struct tm *tmp, time_t t, time_t tz, int dst); + /* Low level logging. To use only for very big messages, otherwise * serverLog() is to prefer. */ void serverLogRaw(int level, const char *msg) { @@ -351,7 +355,9 @@ void serverLogRaw(int level, const char *msg) { pid_t pid = getpid(); gettimeofday(&tv,NULL); - off = strftime(buf,sizeof(buf),"%d %b %H:%M:%S.",localtime(&tv.tv_sec)); + struct tm tm; + nolocks_localtime(&tm,tv.tv_sec,server.timezone,server.daylight_active); + off = strftime(buf,sizeof(buf),"%d %b %H:%M:%S.",&tm); snprintf(buf+off,sizeof(buf)-off,"%03d",(int)tv.tv_usec/1000); if (server.sentinel_mode) { role_char = 'X'; /* Sentinel. */ |