|
@@ -1390,20 +1390,15 @@ static void fill_prstatus(struct elf_prstatus *prstatus,
|
|
prstatus->pr_pgrp = task_pgrp_vnr(p);
|
|
prstatus->pr_pgrp = task_pgrp_vnr(p);
|
|
prstatus->pr_sid = task_session_vnr(p);
|
|
prstatus->pr_sid = task_session_vnr(p);
|
|
if (thread_group_leader(p)) {
|
|
if (thread_group_leader(p)) {
|
|
|
|
+ struct task_cputime cputime;
|
|
|
|
+
|
|
/*
|
|
/*
|
|
- * This is the record for the group leader. Add in the
|
|
|
|
- * cumulative times of previous dead threads. This total
|
|
|
|
- * won't include the time of each live thread whose state
|
|
|
|
- * is included in the core dump. The final total reported
|
|
|
|
- * to our parent process when it calls wait4 will include
|
|
|
|
- * those sums as well as the little bit more time it takes
|
|
|
|
- * this and each other thread to finish dying after the
|
|
|
|
- * core dump synchronization phase.
|
|
|
|
|
|
+ * This is the record for the group leader. It shows the
|
|
|
|
+ * group-wide total, not its individual thread total.
|
|
*/
|
|
*/
|
|
- cputime_to_timeval(cputime_add(p->utime, p->signal->utime),
|
|
|
|
- &prstatus->pr_utime);
|
|
|
|
- cputime_to_timeval(cputime_add(p->stime, p->signal->stime),
|
|
|
|
- &prstatus->pr_stime);
|
|
|
|
|
|
+ thread_group_cputime(p, &cputime);
|
|
|
|
+ cputime_to_timeval(cputime.utime, &prstatus->pr_utime);
|
|
|
|
+ cputime_to_timeval(cputime.stime, &prstatus->pr_stime);
|
|
} else {
|
|
} else {
|
|
cputime_to_timeval(p->utime, &prstatus->pr_utime);
|
|
cputime_to_timeval(p->utime, &prstatus->pr_utime);
|
|
cputime_to_timeval(p->stime, &prstatus->pr_stime);
|
|
cputime_to_timeval(p->stime, &prstatus->pr_stime);
|