diff --git a/src/config.h b/src/config.h index 961503c6325317f497aa025fca7aaae83eb844ea..9f2baaa1f0a379eabf88a5410c9c570305b646fc 100644 --- a/src/config.h +++ b/src/config.h @@ -114,6 +114,8 @@ #if (defined __linux || defined __APPLE__) #define USE_SETPROCTITLE +#define INIT_SETPROCTITLE_REPLACEMENT +void spt_init(int argc, char *argv[]); void setproctitle(const char *fmt, ...); #endif diff --git a/src/redis.c b/src/redis.c index 4f12ecd7634e00906f8c3c6770bf36487d49ca05..cc3b0841c798c06fc8f72a8dd1b213cb5fd5c301 100644 --- a/src/redis.c +++ b/src/redis.c @@ -2586,16 +2586,23 @@ void redisOutOfMemoryHandler(size_t allocation_size) { } void redisSetProcTitle(char *title) { +#ifdef USE_SETPROCTITLE setproctitle("%s %s:%d", title, server.bindaddr ? server.bindaddr : "*", server.port); +#else + REDIS_NOTUSED(title); +#endif } int main(int argc, char **argv) { struct timeval tv; /* We need to initialize our libraries, and the server configuration. */ +#ifdef INIT_SETPROCTITLE_REPLACEMENT + spt_init(argc, argv); +#endif zmalloc_enable_thread_safeness(); zmalloc_set_oom_handler(redisOutOfMemoryHandler); srand(time(NULL)^getpid()); diff --git a/src/setproctitle.c b/src/setproctitle.c index 99bccf2c0c38dbcf4a7d51f64e2cf380519772d3..f44253e1697f31f7d32e9162cb41f272027ad2c4 100644 --- a/src/setproctitle.c +++ b/src/setproctitle.c @@ -2,6 +2,8 @@ * setproctitle.c - Linux/Darwin setproctitle. * -------------------------------------------------------------------------- * Copyright (C) 2010 William Ahern + * Copyright (C) 2013 Salvatore Sanfilippo + * Copyright (C) 2013 Stam He * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the @@ -42,8 +44,9 @@ #if !HAVE_SETPROCTITLE -#if (defined __linux || defined __APPLE__) && defined __GNUC__ +#if (defined __linux || defined __APPLE__) +extern char **environ; static struct { /* original value */ @@ -142,9 +145,8 @@ static int spt_copyargs(int argc, char *argv[]) { } /* spt_copyargs() */ -void spt_init(int argc, char *argv[], char *envp[]) __attribute__((constructor)); - -void spt_init(int argc, char *argv[], char *envp[]) { +void spt_init(int argc, char *argv[]) { + char **envp = environ; char *base, *end, *nul, *tmp; int i, error;