diff options
author | Jerry Jelinek <jerry.jelinek@joyent.com> | 2016-04-29 11:35:48 +0000 |
---|---|---|
committer | Jerry Jelinek <jerry.jelinek@joyent.com> | 2016-04-29 11:35:48 +0000 |
commit | d006a4cbd4e9a251a94eec493f1618a9e452992a (patch) | |
tree | 65a5d74b65e9786362a556a4a09f82fd2bbcfbe6 /usr/src/cmd/ptools/pargs/pargs.c | |
parent | 3e4225906c66015597649ddcdb4fe37a2204fec2 (diff) | |
parent | af868f46a5b794687741d5424de9e3a2d684a84a (diff) | |
download | illumos-joyent-d006a4cbd4e9a251a94eec493f1618a9e452992a.tar.gz |
[illumos-gate merge]
commit af868f46a5b794687741d5424de9e3a2d684a84a
6914 kernel virtual memory fragmentation leads to hang
commit 23a268cfbc75530b746495f3e157b9bc71069420
6565 pargs crashes on growing env
commit 1872b0b513cebbb59f48d3164530f8598d11df23
6929 couple of updates to i386 disassembler tables
Diffstat (limited to 'usr/src/cmd/ptools/pargs/pargs.c')
-rw-r--r-- | usr/src/cmd/ptools/pargs/pargs.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/usr/src/cmd/ptools/pargs/pargs.c b/usr/src/cmd/ptools/pargs/pargs.c index 54792b216a..d8072b56a1 100644 --- a/usr/src/cmd/ptools/pargs/pargs.c +++ b/usr/src/cmd/ptools/pargs/pargs.c @@ -91,6 +91,7 @@ typedef struct pargs_data { uintptr_t *pd_argv; char **pd_argv_strs; size_t pd_envc; + size_t pd_envc_curr; uintptr_t *pd_envp; char **pd_envp_strs; size_t pd_auxc; @@ -641,6 +642,10 @@ build_env(void *data, struct ps_prochandle *pr, uintptr_t addr, const char *str) pargs_data_t *datap = data; if (datap->pd_envp != NULL) { + /* env has more items than last time, skip the newer ones */ + if (datap->pd_envc > datap->pd_envc_curr) + return (0); + datap->pd_envp[datap->pd_envc] = addr; if (str == NULL) datap->pd_envp_strs[datap->pd_envc] = NULL; @@ -660,6 +665,7 @@ get_env(pargs_data_t *datap) datap->pd_envc = 0; (void) Penv_iter(pr, build_env, datap); + datap->pd_envc_curr = datap->pd_envc; datap->pd_envp = safe_zalloc(sizeof (uintptr_t) * datap->pd_envc); datap->pd_envp_strs = safe_zalloc(sizeof (char *) * datap->pd_envc); |