src/share/vm/runtime/thread.cpp
Print this page
*** 3247,3262 ****
if (library == NULL) {
char buffer[JVM_MAXPATHLEN];
char ebuf[1024];
const char *name = agent->name();
if (agent->is_absolute_path()) {
library = hpi::dll_load(name, ebuf, sizeof ebuf);
if (library == NULL) {
// If we can't find the agent, exit.
! vm_exit_during_initialization("Could not find agent library in absolute path", name);
}
} else {
// Try to load the agent from the standard dll directory
hpi::dll_build_name(buffer, sizeof(buffer), Arguments::get_dll_dir(), name);
library = hpi::dll_load(buffer, ebuf, sizeof ebuf);
--- 3247,3268 ----
if (library == NULL) {
char buffer[JVM_MAXPATHLEN];
char ebuf[1024];
const char *name = agent->name();
+ const char *msg = "Could not find agent library ";
if (agent->is_absolute_path()) {
library = hpi::dll_load(name, ebuf, sizeof ebuf);
if (library == NULL) {
+ const char *sub_msg = " in absolute path, with error: ";
+ size_t len = strlen(msg) + strlen(name) + strlen(sub_msg) + strlen(ebuf) + 1;
+ char *buf = NEW_C_HEAP_ARRAY(char, len);
+ jio_snprintf(buf, len, "%s%s%s%s", msg, name, sub_msg, ebuf);
// If we can't find the agent, exit.
! vm_exit_during_initialization(buf, NULL);
! FREE_C_HEAP_ARRAY(char, buf);
}
} else {
// Try to load the agent from the standard dll directory
hpi::dll_build_name(buffer, sizeof(buffer), Arguments::get_dll_dir(), name);
library = hpi::dll_load(buffer, ebuf, sizeof ebuf);
*** 3265,3296 ****
if (library == NULL && strcmp(name, "instrument") == 0) {
char *props = Arguments::get_kernel_properties();
char *home = Arguments::get_java_home();
const char *fmt = "%s/bin/java %s -Dkernel.background.download=false"
" sun.jkernel.DownloadManager -download client_jvm";
! int length = strlen(props) + strlen(home) + strlen(fmt) + 1;
! char *cmd = AllocateHeap(length);
jio_snprintf(cmd, length, fmt, home, props);
int status = os::fork_and_exec(cmd);
FreeHeap(props);
- FreeHeap(cmd);
if (status == -1) {
warning(cmd);
vm_exit_during_initialization("fork_and_exec failed: %s",
strerror(errno));
}
// when this comes back the instrument.dll should be where it belongs.
library = hpi::dll_load(buffer, ebuf, sizeof ebuf);
}
#endif // KERNEL
if (library == NULL) { // Try the local directory
char ns[1] = {0};
hpi::dll_build_name(buffer, sizeof(buffer), ns, name);
library = hpi::dll_load(buffer, ebuf, sizeof ebuf);
if (library == NULL) {
// If we can't find the agent, exit.
! vm_exit_during_initialization("Could not find agent library on the library path or in the local directory", name);
}
}
}
agent->set_os_lib(library);
}
--- 3271,3307 ----
if (library == NULL && strcmp(name, "instrument") == 0) {
char *props = Arguments::get_kernel_properties();
char *home = Arguments::get_java_home();
const char *fmt = "%s/bin/java %s -Dkernel.background.download=false"
" sun.jkernel.DownloadManager -download client_jvm";
! size_t length = strlen(props) + strlen(home) + strlen(fmt) + 1;
! char *cmd = NEW_C_HEAP_ARRAY(char, length);
jio_snprintf(cmd, length, fmt, home, props);
int status = os::fork_and_exec(cmd);
FreeHeap(props);
if (status == -1) {
warning(cmd);
vm_exit_during_initialization("fork_and_exec failed: %s",
strerror(errno));
}
+ FREE_C_HEAP_ARRAY(char, cmd);
// when this comes back the instrument.dll should be where it belongs.
library = hpi::dll_load(buffer, ebuf, sizeof ebuf);
}
#endif // KERNEL
if (library == NULL) { // Try the local directory
char ns[1] = {0};
hpi::dll_build_name(buffer, sizeof(buffer), ns, name);
library = hpi::dll_load(buffer, ebuf, sizeof ebuf);
if (library == NULL) {
+ const char *sub_msg = " on the library path, with error: ";
+ size_t len = strlen(msg) + strlen(name) + strlen(sub_msg) + strlen(ebuf) + 1;
+ char *buf = NEW_C_HEAP_ARRAY(char, len);
+ jio_snprintf(buf, len, "%s%s%s%s", msg, name, sub_msg, ebuf);
// If we can't find the agent, exit.
! vm_exit_during_initialization(buf, NULL);
! FREE_C_HEAP_ARRAY(char, buf);
}
}
}
agent->set_os_lib(library);
}