diff options
author | odaira <odaira@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-10-08 22:31:53 +0000 |
---|---|---|
committer | odaira <odaira@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-10-08 22:31:53 +0000 |
commit | f3754f57cb89ccbf36288555507954debd00567a (patch) | |
tree | 5365d12d8cf67c1e032fac348af3827bde80c6da /missing | |
parent | ecb57e432796c8c0f12604442e89aa0d123bc6ca (diff) |
missing/setproctitle.c: Avoid invalidating argv[1], argv[2], etc. until the first call to Process.setproctitle, because the ps command of AIX refers to the argv array. [Bug #10090]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47852 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'missing')
-rw-r--r-- | missing/setproctitle.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/missing/setproctitle.c b/missing/setproctitle.c index 9dcf37560b..602ddf105c 100644 --- a/missing/setproctitle.c +++ b/missing/setproctitle.c @@ -74,6 +74,7 @@ static char *argv_start = NULL; static size_t argv_env_len = 0; static size_t argv_len = 0; +static char **argv1_addr = NULL; #endif #endif /* HAVE_SETPROCTITLE */ @@ -119,7 +120,9 @@ compat_init_setproctitle(int argc, char *argv[]) lastenvp = envp[i] + strlen(envp[i]); } - argv[1] = NULL; + /* We keep argv[1], argv[2], etc. at this moment, + because the ps command of AIX refers to them. */ + argv1_addr = &argv[1]; argv_start = argv[0]; argv_len = lastargv - argv[0]; argv_env_len = lastenvp - argv[0]; @@ -162,6 +165,8 @@ setproctitle(const char *fmt, ...) argvlen = len > argv_len ? argv_env_len : argv_len; for(; len < argvlen; len++) argv_start[len] = SPT_PADCHAR; + /* argv[1], argv[2], etc. are no longer valid. */ + *argv1_addr = NULL; #endif #endif /* SPT_NONE */ |