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); }