< prev index next >
src/jdk.hotspot.agent/linux/native/libsaproc/ps_proc.c
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
@@ -337,15 +337,10 @@
if (*--p=='\n') *p='\0';
}
return rslt;
}
-// callback for read_thread_info
-static bool add_new_thread(struct ps_prochandle* ph, pthread_t pthread_id, lwpid_t lwp_id) {
- return add_thread_info(ph, pthread_id, lwp_id) != NULL;
-}
-
static bool read_lib_info(struct ps_prochandle* ph) {
char fname[32];
char buf[PATH_MAX];
FILE *fp = NULL;
@@ -441,11 +436,11 @@
.get_lwp_regs= process_get_lwp_regs
};
// attach to the process. One and only one exposed stuff
JNIEXPORT struct ps_prochandle* JNICALL
-Pgrab(pid_t pid, char* err_buf, size_t err_buf_len, bool is_in_container) {
+Pgrab(pid_t pid, char* err_buf, size_t err_buf_len) {
struct ps_prochandle* ph = NULL;
thread_info* thr = NULL;
attach_state_t attach_status = ATTACH_SUCCESS;
if ( (ph = (struct ps_prochandle*) calloc(1, sizeof(struct ps_prochandle))) == NULL) {
@@ -462,24 +457,23 @@
return NULL;
}
// initialize ps_prochandle
ph->pid = pid;
+ add_thread_info(ph, ph->pid);
// initialize vtable
ph->ops = &process_ops;
// read library info and symbol tables, must do this before attaching threads,
// as the symbols in the pthread library will be used to figure out
// the list of threads within the same process.
read_lib_info(ph);
- // read thread info
- if (is_in_container) {
/*
- * If the process is running in the container, SA scans all tasks in
- * /proc/<PID>/task to read all threads info.
+ * Read thread info.
+ * SA scans all tasks in /proc/<PID>/task to read all threads info.
*/
char taskpath[PATH_MAX];
DIR *dirp;
struct dirent *entry;
@@ -492,16 +486,15 @@
}
lwp_id = atoi(entry->d_name);
if (lwp_id == ph->pid) {
continue;
}
- add_new_thread(ph, -1, lwp_id);
+ if (!process_doesnt_exist(lwp_id)) {
+ add_thread_info(ph, lwp_id);
}
- closedir(dirp);
- } else {
- read_thread_info(ph, add_new_thread);
}
+ closedir(dirp);
// attach to the threads
thr = ph->threads;
while (thr) {
< prev index next >