diff --git a/src/plugins/proctrack/cray/proctrack_cray.c b/src/plugins/proctrack/cray/proctrack_cray.c index 906a1282a45603d5ff088751d4d1ef6358fd3a81..9dcc0751d7f94b453b38c35abb584063290cf181 100644 --- a/src/plugins/proctrack/cray/proctrack_cray.c +++ b/src/plugins/proctrack/cray/proctrack_cray.c @@ -282,10 +282,21 @@ int proctrack_p_plugin_get_pids(uint64_t cont_id, pid_t **pids, int *npids) p = (pid_t *)xmalloc(bufsize); pidcnt = job_getpidlist((jid_t)cont_id, p, bufsize); if (pidcnt == -1) { - error("job_getpidlist() failed: %m"); + int rc = SLURM_SUCCESS; + /* There is a possiblity for a race condition + where if the last task in the job exits + between job_getpidcnt and job_getpidlist. + That is ok, so just return SUCCESS; + */ + if (errno != ENODATA) { + rc = SLURM_ERROR; + error("job_getpidlist() failed: %m"); + } + *pids = NULL; *npids = 0; xfree(p); + return SLURM_ERROR; } *pids = p;