[
https://issues.apache.org/jira/browse/PROTON-2294?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17229088#comment-17229088
]
Jiri Daněk commented on PROTON-2294:
------------------------------------
Here's the output in GitHub Actions
https://github.com/jiridanek/qpid-proton/runs/1378890673#step:13:46
{noformat}
Start 3: c-proactor-test
3: Test command: /opt/hostedtoolcache/Python/3.6.12/x64/bin/python
"/home/runner/work/qpid-proton/qpid-proton/scripts/env.py" "--"
"/home/runner/work/qpid-proton/qpid-proton/BLD/c/tests/c-proactor-test"
3: Test timeout computed to be: 1500
3: Error locking mutex: Invalid argument
{noformat}
CC [~cliffjansen]
> pthread_mutex_lock failing with EINVAL in proactor tests
> --------------------------------------------------------
>
> Key: PROTON-2294
> URL: https://issues.apache.org/jira/browse/PROTON-2294
> Project: Qpid Proton
> Issue Type: Bug
> Components: proton-c
> Affects Versions: proton-c-0.33.0
> Reporter: Jiri Daněk
> Priority: Major
>
> Functions {{pthread_mutex_lock}} and {{pthread_mutex_unlock}} return a status
> code. The status is not checked in Proton code, and any errors are therefore
> ignored.
> According to notes on https://reviews.llvm.org/D18132?id=50550, which is the
> CL that implements the {{ReportTypeMutexInvalidAccess}} TSan check, ignoring
> the status there is standard practice. Hence the need for the ASan check.
> The TSan warnings that were suppressed in {{# PROTON-2292 & PROTON-1496:
> false suspected collision between set/free}} only highlight a nonzero return
> code from the aforementioned functions. This can be demonstrated if return
> code check is inserted.
> The TSan warnings are not concerned with potentialities (the way Coverity
> works), it reports the warnings as it sees the program to execute, and the
> undefined behavior is happening. There can be false positives, but this is
> probably not it.
> In c-proactor-test/proactor_disconnect test, {{pthread_mutex_lock}} returns
> 22, which is EINVAL.
> {code}
> static inline void lock(pmutex *m) {
> int err = pthread_mutex_lock(m);
> if (err != 0) {
> fprintf(stderr, "Error locking mutex: %s\n", strerror(err));
> exit(1);
> }
> }
> static inline void unlock(pmutex *m) {
> int err = pthread_mutex_unlock(m);
> if (err != 0) {
> fprintf(stderr, "Error unlocking mutex: %s\n", strerror(err));
> exit(1);
> }
> }
> {code}
> {noformat}
> /home/jdanek/repos/qpid/qpid-proton/cmake-build-debugwithtsan/c/tests/c-proactor-test
> -r xml -d yes --order lex
> Testing started at 9:53 AM ...
> ==================
> WARNING: ThreadSanitizer: use of an invalid mutex (e.g. uninitialized or
> destroyed) (pid=27191)
> #0 pthread_mutex_lock <null> (libtsan.so.0+0x4284b)
> #1 lock
> /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll-internal.h:329
> (libqpid-proton-proactor.so.1+0xbb27)
> #2 pni_timer_set
> /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll_timer.c:248
> (libqpid-proton-proactor.so.1+0xbb27)
> #3 pni_timer_free
> /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll_timer.c:144
> (libqpid-proton-proactor.so.1+0xbe3a)
> #4 pconnection_final_free
> /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:797
> (libqpid-proton-proactor.so.1+0xc1a0)
> #5 pconnection_cleanup
> /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:814
> (libqpid-proton-proactor.so.1+0xc2f7)
> #6 pconnection_forced_shutdown
> /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:855
> (libqpid-proton-proactor.so.1+0x14c9d)
> #7 pn_proactor_free
> /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1994
> (libqpid-proton-proactor.so.1+0x14c9d)
> #8 pn_test::auto_free<pn_proactor_t, &pn_proactor_free>::~auto_free()
> /home/jdanek/repos/qpid/qpid-proton/c/tests/././pn_test.hpp:53
> (c-proactor-test+0x4355aa)
> #9 pn_test::proactor::~proactor()
> /home/jdanek/repos/qpid/qpid-proton/c/tests/./pn_test_proactor.hpp:38
> (c-proactor-test+0x415149)
> #10 ____C_A_T_C_H____T_E_S_T____26
> /home/jdanek/repos/qpid/qpid-proton/c/tests/proactor_test.cpp:677
> (c-proactor-test+0x4329e1)
> #11 Catch::FreeFunctionTestCase::invoke() const
> /home/jdanek/repos/qpid/qpid-proton/tests/include/catch.hpp:7415
> (c-proactor-test+0x454059)
> #12 Catch::TestCase::invoke() const
> /home/jdanek/repos/qpid/qpid-proton/tests/include/catch.hpp:8413
> (c-proactor-test+0x454059)
> #13 Catch::RunContext::invokeActiveTestCase()
> /home/jdanek/repos/qpid/qpid-proton/tests/include/catch.hpp:6941
> (c-proactor-test+0x454059)
> #14 Catch::RunContext::runCurrentTest(std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >&,
> std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
> >&) /home/jdanek/repos/qpid/qpid-proton/tests/include/catch.hpp:6911
> (c-proactor-test+0x454059)
> #15 Catch::RunContext::runTest(Catch::TestCase const&)
> /home/jdanek/repos/qpid/qpid-proton/tests/include/catch.hpp:6706
> (c-proactor-test+0x454059)
> #16 Catch::runTests(Catch::Ptr<Catch::Config> const&)
> /home/jdanek/repos/qpid/qpid-proton/tests/include/catch.hpp:7086
> (c-proactor-test+0x454059)
> #17 Catch::Session::runInternal()
> /home/jdanek/repos/qpid/qpid-proton/tests/include/catch.hpp:7258
> (c-proactor-test+0x40d93c)
> #18 Catch::Session::run()
> /home/jdanek/repos/qpid/qpid-proton/tests/include/catch.hpp:7217
> (c-proactor-test+0x40d93c)
> #19 Catch::Session::run(int, char const* const*)
> /home/jdanek/repos/qpid/qpid-proton/tests/include/catch.hpp:7182
> (c-proactor-test+0x40d93c)
> #20 main
> /home/jdanek/repos/qpid/qpid-proton/tests/include/catch.hpp:11469
> (c-proactor-test+0x40d93c)
> Location is heap block of size 1152 at 0x7b6400000500 allocated by main
> thread:
> #0 calloc <null> (libtsan.so.0+0x2f905)
> #1 pn_proactor
> /home/jdanek/repos/qpid/qpid-proton/c/src/proactor/epoll.c:1942
> (libqpid-proton-proactor.so.1+0xca64)
> #2 pn_test::proactor::proactor(pn_test::handler*)
> /home/jdanek/repos/qpid/qpid-proton/c/tests/pn_test_proactor.cpp:45
> (c-proactor-test+0x4139c9)
> #3 ____C_A_T_C_H____T_E_S_T____26
> /home/jdanek/repos/qpid/qpid-proton/c/tests/proactor_test.cpp:677
> (c-proactor-test+0x42fe5a)
> #4 Catch::FreeFunctionTestCase::invoke() const
> /home/jdanek/repos/qpid/qpid-proton/tests/include/catch.hpp:7415
> (c-proactor-test+0x454059)
> #5 Catch::TestCase::invoke() const
> /home/jdanek/repos/qpid/qpid-proton/tests/include/catch.hpp:8413
> (c-proactor-test+0x454059)
> #6 Catch::RunContext::invokeActiveTestCase()
> /home/jdanek/repos/qpid/qpid-proton/tests/include/catch.hpp:6941
> (c-proactor-test+0x454059)
> #7 Catch::RunContext::runCurrentTest(std::__cxx11::basic_string<char,
> std::char_traits<char>, std::allocator<char> >&,
> std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
> >&) /home/jdanek/repos/qpid/qpid-proton/tests/include/catch.hpp:6911
> (c-proactor-test+0x454059)
> #8 Catch::RunContext::runTest(Catch::TestCase const&)
> /home/jdanek/repos/qpid/qpid-proton/tests/include/catch.hpp:6706
> (c-proactor-test+0x454059)
> #9 Catch::runTests(Catch::Ptr<Catch::Config> const&)
> /home/jdanek/repos/qpid/qpid-proton/tests/include/catch.hpp:7086
> (c-proactor-test+0x454059)
> #10 Catch::Session::runInternal()
> /home/jdanek/repos/qpid/qpid-proton/tests/include/catch.hpp:7258
> (c-proactor-test+0x40d93c)
> #11 Catch::Session::run()
> /home/jdanek/repos/qpid/qpid-proton/tests/include/catch.hpp:7217
> (c-proactor-test+0x40d93c)
> #12 Catch::Session::run(int, char const* const*)
> /home/jdanek/repos/qpid/qpid-proton/tests/include/catch.hpp:7182
> (c-proactor-test+0x40d93c)
> #13 main
> /home/jdanek/repos/qpid/qpid-proton/tests/include/catch.hpp:11469
> (c-proactor-test+0x40d93c)
> Mutex M0 (0x7b64000005c0) created at:
> [failed to restore the stack]
> SUMMARY: ThreadSanitizer: use of an invalid mutex (e.g. uninitialized or
> destroyed)
> (/nix/store/zhbhxp4jgalycwffildy2bwcgmrsmayk-gcc-9.2.0-lib/lib/libtsan.so.0+0x4284b)
> in pthread_mutex_lock
> ==================
> Error locking mutex: Invalid argument
> ThreadSanitizer: reported 1 warnings
> Process finished with exit code 66
> {noformat}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]