This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch dev-1.1.2
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/dev-1.1.2 by this push:
     new eb0756c401 [thirdparty](brpc) fix _dl_sym undefined reference on 
Ubuntu22.04 (#11643)
eb0756c401 is described below

commit eb0756c401768adcb910e967a6ed78750ee5d5bd
Author: Dongyang Li <hello_step...@qq.com>
AuthorDate: Wed Aug 10 19:23:10 2022 +0800

    [thirdparty](brpc) fix _dl_sym undefined reference on Ubuntu22.04 (#11643)
    
    Co-authored-by: qcloud <ubuntu@localhost.localdomain>
---
 thirdparty/download-thirdparty.sh           | 13 ++++++++++++-
 thirdparty/patches/brpc-1.1.0-_dl_sym.patch | 28 ++++++++++++++++++++++++++++
 2 files changed, 40 insertions(+), 1 deletion(-)

diff --git a/thirdparty/download-thirdparty.sh 
b/thirdparty/download-thirdparty.sh
index c9d82949a3..b236a64e34 100755
--- a/thirdparty/download-thirdparty.sh
+++ b/thirdparty/download-thirdparty.sh
@@ -349,4 +349,15 @@ fi
 cd -
 echo "Finished patching $AWS_SDK_SOURCE"
 
-
+cd "${TP_SOURCE_DIR}/${BRPC_SOURCE}"
+if [[ ! -f $PATCHED_MARK ]]; then
+    if [[ "$(uname -s)" == 'Darwin' ]]; then
+        patch -p1 <"${TP_PATCH_DIR}/brpc-1.1.0.patch"
+        touch ${PATCHED_MARK}
+    else
+        patch -p0 <"$TP_PATCH_DIR/brpc-1.1.0-_dl_sym.patch"
+        touch ${PATCHED_MARK}
+    fi
+fi
+cd -
+echo "Finished patching ${BRPC_SOURCE}"
diff --git a/thirdparty/patches/brpc-1.1.0-_dl_sym.patch 
b/thirdparty/patches/brpc-1.1.0-_dl_sym.patch
new file mode 100644
index 0000000000..35d06b7708
--- /dev/null
+++ b/thirdparty/patches/brpc-1.1.0-_dl_sym.patch
@@ -0,0 +1,28 @@
+--- src/bthread/mutex.cpp      2022-08-10 13:14:11.792739916 +0800
++++ src/bthread/mutex.cpp      2022-08-10 13:04:54.644764937 +0800
+@@ -44,7 +44,7 @@
+ #include "bthread/log.h"
+ 
+ extern "C" {
+-extern void* _dl_sym(void* handle, const char* symbol, void* caller);
++extern void* __attribute__((weak)) _dl_sym(void* handle, const char* symbol, 
void* caller);
+ }
+ 
+ namespace bthread {
+@@ -408,8 +408,14 @@ static void init_sys_mutex_lock() {
+ #if defined(OS_LINUX)
+     // TODO: may need dlvsym when GLIBC has multiple versions of a same 
symbol.
+     // 
http://blog.fesnel.com/blog/2009/08/25/preloading-with-multiple-symbol-versions
+-    sys_pthread_mutex_lock = (MutexOp)_dl_sym(RTLD_NEXT, 
"pthread_mutex_lock", (void*)init_sys_mutex_lock);
+-    sys_pthread_mutex_unlock = (MutexOp)_dl_sym(RTLD_NEXT, 
"pthread_mutex_unlock", (void*)init_sys_mutex_lock);
++    if (_dl_sym) {
++        sys_pthread_mutex_lock = (MutexOp)_dl_sym(RTLD_NEXT, 
"pthread_mutex_lock", (void*)init_sys_mutex_lock);
++        sys_pthread_mutex_unlock = (MutexOp)_dl_sym(RTLD_NEXT, 
"pthread_mutex_unlock", (void*)init_sys_mutex_lock);
++    } else {
++        // _dl_sym may be undefined reference in some system, fallback to 
dlsym
++        sys_pthread_mutex_lock = (MutexOp)dlsym(RTLD_NEXT, 
"pthread_mutex_lock");
++        sys_pthread_mutex_unlock = (MutexOp)dlsym(RTLD_NEXT, 
"pthread_mutex_unlock");
++    }
+ #elif defined(OS_MACOSX)
+     // TODO: look workaround for dlsym on mac
+     sys_pthread_mutex_lock = (MutexOp)dlsym(RTLD_NEXT, "pthread_mutex_lock");


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to