[ 
https://issues.apache.org/jira/browse/THRIFT-4594?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16529114#comment-16529114
 ] 

Rich Felker edited comment on THRIFT-4594 at 7/1/18 2:36 PM:
-------------------------------------------------------------

mtx_init is unrelated; it's part of the C11 mutex API, not the POSIX threads 
mutex API.

musl absolutely does support errorchecking mutexes. What it does not support is 
the nonstandard static initializers to bypass calling pthread_mutex_init. This 
is intentional because they would make the layout of the mutex object ABI, 
which would lock in a particular implementation and thereby precludes 
improvements.

musl also does not support nonstandard types like ADAPTIVE (which is pretty 
much a nop anyway), but all of the standard ones specified in POSIX are 
supported.

 


was (Author: dalias):
mtx_init is unrelated; it's part of the C11 mutex API, not the POSIX threads 
mutex API.

musl absolutely does support errorchecking mutexes. What it does not support is 
the nonstandard static initializers to bypass calling pthread_mutex_init. This 
is intentional because they would make the layout of the mutex object ABI, 
which we locks in a particular implementation and thereby precludes 
improvements.

musl also does not support nonstandard types like ADAPTIVE (which is pretty 
much a nop anyway), but all of the standard ones specified in POSIX are 
supported.

 

> Unable to Build Test Suite in Alpine Linux
> ------------------------------------------
>
>                 Key: THRIFT-4594
>                 URL: https://issues.apache.org/jira/browse/THRIFT-4594
>             Project: Thrift
>          Issue Type: Bug
>          Components: Test Suite
>    Affects Versions: 0.11.0
>         Environment: Ubuntu Bionic (native)
> alpine:latest (docker)
>            Reporter: Christopher Friedt
>            Priority: Minor
>             Fix For: 0.12.0
>
>         Attachments: make-check-alpine-3.8.txt, 
> make-check-macos-10.13.5.text, musl-1.1.19-mtx-init-supported-types.patch, 
> thrift-alpine-20180701.tar.gz
>
>
> It seems that the 0.11.0 lib/cpp/test suite is not building correctly when 
> run inside of Alpine Linux 3.8 in a Docker container.
> I've narrowed the culprits down to the non-portable (NP) class of Mutex 
> initializers. The failure occurs in unpatched code (and obviously in my CI 
> build recipe, attached).
> Currently, I'm working on automating builds of thrift for Alpine Linux 3.8, 
> and they will likely require "make check" to pass successfully in future 
> versions. Might as well ensure it works now.
> If you want to duplicate my build easily in Docker, you can use the 
> attachment (e.g. tar xpvzf thrift-ci-build-20180627.tar.xz; cd 
> thrift-20180627; docker build -t foo .)
> {noformat}
> make check
> ...
> /bin/bash ../../../libtool  --tag=CXX   --mode=link 
> x86_64-alpine-linux-musl-g++ -Wall -Wextra -pedantic -Os -fomit-frame-pointer 
> -L/usr/lib -Wl,--no-undefined -o TPipedTransportTest TPipedTransportTest.o 
> TPipeInterruptTest.o libtestgencpp.la ../../../lib/cpp/libthrift.la 
> /usr/lib/libboost_unit_test_framework.a /usr/lib/libboost_system.a 
> /usr/lib/libboost_thread-mt.a -lrt -lpthread 
> concurrency/MutexTest.o: In function `MutexTest::happy_path::test_method()':
> MutexTest.cpp:(.text+0x18): undefined reference to 
> `apache::thrift::concurrency::Mutex::ERRORCHECK_INITIALIZER(void*)'
> concurrency/MutexTest.o: In function 
> `MutexTest::recursive_happy_path::test_method()':
> MutexTest.cpp:(.text+0x580): undefined reference to 
> `apache::thrift::concurrency::Mutex::RECURSIVE_INITIALIZER(void*)'
> concurrency/MutexTest.o: In function `MutexTest::trylock::test_method()':
> MutexTest.cpp:(.text+0x1573): undefined reference to 
> `apache::thrift::concurrency::Mutex::ADAPTIVE_INITIALIZER(void*)'
> concurrency/MutexTest.o: In function `LFAT::LFAT()':
> MutexTest.cpp:(.text._ZN4LFATC2Ev[_ZN4LFATC5Ev]+0x17): undefined reference to 
> `apache::thrift::concurrency::Mutex::ERRORCHECK_INITIALIZER(void*)'
> collect2: error: ld returned 1 exit status
> make[5]: *** [Makefile:1190: UnitTests] Error 1
> make[5]: *** Waiting for unfinished jobs....
> libtool: link: x86_64-alpine-linux-musl-g++ -Wall -Wextra -pedantic -Os 
> -fomit-frame-pointer -Wl,--no-undefined -o .libs/TFDTransportTest 
> TFDTransportTest.o  -L/usr/lib ../../../lib/cpp/.libs/libthrift.so -lssl 
> -lcrypto /usr/lib/libboost_unit_test_framework.a -lrt -lpthread
> libtool: link: x86_64-alpine-linux-musl-g++ -Wall -Wextra -pedantic -Os 
> -fomit-frame-pointer -Wl,--no-undefined -o .libs/TPipedTransportTest 
> TPipedTransportTest.o TPipeInterruptTest.o  -L/usr/lib 
> ./.libs/libtestgencpp.a 
> /home/alpine/thrift/src/thrift-0.11.0/lib/cpp/.libs/libthrift.so 
> ../../../lib/cpp/.libs/libthrift.so -lssl -lcrypto 
> /usr/lib/libboost_unit_test_framework.a /usr/lib/libboost_system.a 
> /usr/lib/libboost_thread-mt.a -lrt -lpthread
> make[5]: Leaving directory 
> '/home/alpine/thrift/src/thrift-0.11.0/lib/cpp/test'
> make[4]: *** [Makefile:1507: check-am] Error 2
> make[4]: Leaving directory 
> '/home/alpine/thrift/src/thrift-0.11.0/lib/cpp/test'
> make[3]: *** [Makefile:1510: check] Error 2
> make[3]: Leaving directory 
> '/home/alpine/thrift/src/thrift-0.11.0/lib/cpp/test'
> make[2]: *** [Makefile:1661: check-recursive] Error 1
> make[2]: Leaving directory '/home/alpine/thrift/src/thrift-0.11.0/lib/cpp'
> make[1]: Leaving directory '/home/alpine/thrift/src/thrift-0.11.0/lib'
> make[1]: *** [Makefile:576: check-recursive] Error 1
> make: *** [Makefile:659: check-recursive] Error 1
> >>> ERROR: thrift*: check failed
> >>> ERROR: thrift: all failed
> >>> thrift: Uninstalling dependencies..{noformat}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to