summaryrefslogtreecommitdiff
path: root/missing
diff options
context:
space:
mode:
authorodaira <odaira@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-10-08 22:31:53 (GMT)
committerodaira <odaira@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-10-08 22:31:53 (GMT)
commitf3754f57cb89ccbf36288555507954debd00567a (patch)
tree5365d12d8cf67c1e032fac348af3827bde80c6da /missing
parentecb57e432796c8c0f12604442e89aa0d123bc6ca (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.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/missing/setproctitle.c b/missing/setproctitle.c
index 9dcf375..602ddf1 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 */