-
Bug
-
Resolution: Fixed
-
P3
-
20, 21, 22
-
b08
-
linux
The generated image contains libjpackageapplauncheraux.so that contains a destructor function dcon().
It sets static logger to the local nopLogAppender, and when the library is unloaded, the follow call sequence occurs:
1) ----> libc runs exit handlers
0x7ffff7f9e028 <(anonymous namespace)::nopLogAppender>
libjpackageapplauncheraux.so!LogAppender::~LogAppender(LogAppender * const this) (/home/vladimirp/git/jdk/src/jdk.jpackage/share/native/common/Log.h:72)
libjpackageapplauncheraux.so!NopLogAppender::~NopLogAppender(NopLogAppender * const this) (/home/vladimirp/git/jdk/src/jdk.jpackage/share/native/common/Log.h:78)
libc.so.6!__run_exit_handlers(int status, struct exit_function_list ** listp, _Bool run_list_atexit, _Bool run_dtors) (exit.c:111)
libc.so.6!__GI_exit(int status) (exit.c:141)
libc.so.6!__libc_start_call_main(int (*)(int, char **, char **) main, int argc, char ** argv) (libc_start_call_main.h:74)
libc.so.6!__libc_start_main_impl(int (*)(int, char **, char **) main, int argc, char ** argv, int (*)(int, char **, char **) init, void (*)(void) fini, void (*)(void) rtld_fini, void * stack_end) (libc-start.c:360)
_start (Unknown Source:0)
2) ---> the the exit handlers run destructor function , but logger is already disposed
0x7ffff7f9e120 <(anonymous namespace)::defaultLoggerMemory>
Logger::LOG_TRACE
0x7ffff7f9e028 <(anonymous namespace)::nopLogAppender>
libc.so.6!__pthread_kill_implementation(int no_tid, int signo, pthread_t threadid) (pthread_kill.c:44)
libc.so.6!__pthread_kill_internal(int signo, pthread_t threadid) (pthread_kill.c:78)
libc.so.6!__GI___pthread_kill(pthread_t threadid, int signo) (pthread_kill.c:89)
libc.so.6!__GI_raise(int sig) (raise.c:26)
libc.so.6!__GI_abort() (abort.c:79)
libstdc++.so.6![Unknown/Just-In-Time compiled code] (Unknown Source:0)
libstdc++.so.6!std::terminate() (Unknown Source:0)
libstdc++.so.6!__cxa_pure_virtual (Unknown Source:0)
libjpackageapplauncheraux.so!Logger::log(const Logger * const this, Logger::LogLevel logLevel, LPCTSTR fileName, int lineNum, LPCTSTR funcName, const tstring & message) (/home/vladimirp/git/jdk/src/jdk.jpackage/share/native/common/Log.cpp:132)
libjpackageapplauncheraux.so!Logger::log(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::const_pointer message, LPCTSTR funcName, int lineNum, LPCTSTR fileName, Logger::LogLevel logLevel, const Logger * const this) (/usr/include/c++/12/bits/basic_string.tcc:238)
libjpackageapplauncheraux.so!(anonymous namespace)::dcon() (/home/vladimirp/git/jdk/src/jdk.jpackage/linux/native/libapplauncher/LinuxLauncherLib.cpp:171)
ld-linux-x86-64.so.2!_dl_call_fini(void * closure_map) (dl-call_fini.c:43)
ld-linux-x86-64.so.2!_dl_fini() (dl-fini.c:114)
libc.so.6!__run_exit_handlers(int status, struct exit_function_list ** listp, _Bool run_list_atexit, _Bool run_dtors) (exit.c:111)
libc.so.6!__GI_exit(int status) (exit.c:141)
libc.so.6!__libc_start_call_main(int (*)(int, char **, char **) main, int argc, char ** argv) (libc_start_call_main.h:74)
libc.so.6!__libc_start_main_impl(int (*)(int, char **, char **) main, int argc, char ** argv, int (*)(int, char **, char **) init, void (*)(void) fini, void (*)(void) rtld_fini, void * stack_end) (libc-start.c:360)
_start (Unknown Source:0)
This causes a crash with the following message:
pure virtual method called
terminate called without an active exception
Unexpected data in the output fails the test.
It sets static logger to the local nopLogAppender, and when the library is unloaded, the follow call sequence occurs:
1) ----> libc runs exit handlers
0x7ffff7f9e028 <(anonymous namespace)::nopLogAppender>
libjpackageapplauncheraux.so!LogAppender::~LogAppender(LogAppender * const this) (/home/vladimirp/git/jdk/src/jdk.jpackage/share/native/common/Log.h:72)
libjpackageapplauncheraux.so!NopLogAppender::~NopLogAppender(NopLogAppender * const this) (/home/vladimirp/git/jdk/src/jdk.jpackage/share/native/common/Log.h:78)
libc.so.6!__run_exit_handlers(int status, struct exit_function_list ** listp, _Bool run_list_atexit, _Bool run_dtors) (exit.c:111)
libc.so.6!__GI_exit(int status) (exit.c:141)
libc.so.6!__libc_start_call_main(int (*)(int, char **, char **) main, int argc, char ** argv) (libc_start_call_main.h:74)
libc.so.6!__libc_start_main_impl(int (*)(int, char **, char **) main, int argc, char ** argv, int (*)(int, char **, char **) init, void (*)(void) fini, void (*)(void) rtld_fini, void * stack_end) (libc-start.c:360)
_start (Unknown Source:0)
2) ---> the the exit handlers run destructor function , but logger is already disposed
0x7ffff7f9e120 <(anonymous namespace)::defaultLoggerMemory>
Logger::LOG_TRACE
0x7ffff7f9e028 <(anonymous namespace)::nopLogAppender>
libc.so.6!__pthread_kill_implementation(int no_tid, int signo, pthread_t threadid) (pthread_kill.c:44)
libc.so.6!__pthread_kill_internal(int signo, pthread_t threadid) (pthread_kill.c:78)
libc.so.6!__GI___pthread_kill(pthread_t threadid, int signo) (pthread_kill.c:89)
libc.so.6!__GI_raise(int sig) (raise.c:26)
libc.so.6!__GI_abort() (abort.c:79)
libstdc++.so.6![Unknown/Just-In-Time compiled code] (Unknown Source:0)
libstdc++.so.6!std::terminate() (Unknown Source:0)
libstdc++.so.6!__cxa_pure_virtual (Unknown Source:0)
libjpackageapplauncheraux.so!Logger::log(const Logger * const this, Logger::LogLevel logLevel, LPCTSTR fileName, int lineNum, LPCTSTR funcName, const tstring & message) (/home/vladimirp/git/jdk/src/jdk.jpackage/share/native/common/Log.cpp:132)
libjpackageapplauncheraux.so!Logger::log(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::const_pointer message, LPCTSTR funcName, int lineNum, LPCTSTR fileName, Logger::LogLevel logLevel, const Logger * const this) (/usr/include/c++/12/bits/basic_string.tcc:238)
libjpackageapplauncheraux.so!(anonymous namespace)::dcon() (/home/vladimirp/git/jdk/src/jdk.jpackage/linux/native/libapplauncher/LinuxLauncherLib.cpp:171)
ld-linux-x86-64.so.2!_dl_call_fini(void * closure_map) (dl-call_fini.c:43)
ld-linux-x86-64.so.2!_dl_fini() (dl-fini.c:114)
libc.so.6!__run_exit_handlers(int status, struct exit_function_list ** listp, _Bool run_list_atexit, _Bool run_dtors) (exit.c:111)
libc.so.6!__GI_exit(int status) (exit.c:141)
libc.so.6!__libc_start_call_main(int (*)(int, char **, char **) main, int argc, char ** argv) (libc_start_call_main.h:74)
libc.so.6!__libc_start_main_impl(int (*)(int, char **, char **) main, int argc, char ** argv, int (*)(int, char **, char **) init, void (*)(void) fini, void (*)(void) rtld_fini, void * stack_end) (libc-start.c:360)
_start (Unknown Source:0)
This causes a crash with the following message:
pure virtual method called
terminate called without an active exception
Unexpected data in the output fails the test.
- links to
-
Commit openjdk/jdk/78a8a99d
-
Review openjdk/jdk/14971
-
Review(master) openjdk/jdk21u-dev/1271