Print this page
4159 dtrace ignores all ustack helper frames from dead processes
Reviewed by: Bryan Cantrill <bryan@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>
*** 1379,1390 ****
} else {
(void) snprintf(c, sizeof (c),
"%s`%s", dt_basename(objname), name);
}
} else if (str != NULL && str[0] != '\0' && str[0] != '@' &&
! (P != NULL && ((map = Paddr_to_map(P, pc[i])) == NULL ||
! (map->pr_mflags & MA_WRITE)))) {
/*
* If the current string pointer in the string table
* does not point to an empty string _and_ the program
* counter falls in a writable region, we'll use the
* string from the string table instead of the raw
--- 1379,1390 ----
} else {
(void) snprintf(c, sizeof (c),
"%s`%s", dt_basename(objname), name);
}
} else if (str != NULL && str[0] != '\0' && str[0] != '@' &&
! (P == NULL || (map = Paddr_to_map(P, pc[i])) == NULL ||
! map->pr_mflags & MA_WRITE)) {
/*
* If the current string pointer in the string table
* does not point to an empty string _and_ the program
* counter falls in a writable region, we'll use the
* string from the string table instead of the raw
*** 1392,1402 ****
* some (broken) ustack helpers will return a string
* even for a program counter that they can't
* identify. If we have a string for a program
* counter that falls in a segment that isn't
* writable, we assume that we have fallen into this
! * case and we refuse to use the string.
*/
(void) snprintf(c, sizeof (c), "%s", str);
} else {
if (P != NULL && Pobjname(P, pc[i], objname,
sizeof (objname)) != NULL) {
--- 1392,1405 ----
* some (broken) ustack helpers will return a string
* even for a program counter that they can't
* identify. If we have a string for a program
* counter that falls in a segment that isn't
* writable, we assume that we have fallen into this
! * case and we refuse to use the string. Finally,
! * note that if we could not grab the process (e.g.,
! * because it exited), the information from the helper
! * is better than nothing.
*/
(void) snprintf(c, sizeof (c), "%s", str);
} else {
if (P != NULL && Pobjname(P, pc[i], objname,
sizeof (objname)) != NULL) {