diff --git a/cmake/external/grpc.cmake b/cmake/external/grpc.cmake index 6a913662238af4a006ee5f3ba3ee1fdc8e434e9e..0c7db6a444d7b587f3aa1aa657fc77d97331f41b 100644 --- a/cmake/external/grpc.cmake +++ b/cmake/external/grpc.cmake @@ -44,12 +44,12 @@ ExternalProject_Add( # 3. keep only zlib, cares, protobuf, boringssl under "third_party", # checkout and clean other dirs under third_party # 4. remove .git, and package the directory. - URL "http://paddlepaddledeps.bj.bcebos.com/grpc-v1.10.x-paddle.tar.gz" - URL_MD5 "eb06e8a63e679c5ec14ac9debade7ba1" + URL "http://paddlepaddledeps.bj.bcebos.com/grpc-v1.10.x.tar.gz" + URL_MD5 "1f268a2aff6759839dccd256adcc91cf" PREFIX ${GRPC_SOURCES_DIR} UPDATE_COMMAND "" CONFIGURE_COMMAND "" - BUILD_IN_SOURCE 1 + PATCH_COMMAND "git apply ${PADDLE_SOURCE_DIR}/patches/grpc/fix_too_early_destory.patch" # NOTE(yuyang18): # Disable -Werror, otherwise the compile will fail in MacOS. # It seems that we cannot configure that by make command. diff --git a/patches/grpc/fix_too_early_destory.patch b/patches/grpc/fix_too_early_destory.patch new file mode 100644 index 0000000000000000000000000000000000000000..d7790d56b07551b8daae9b9a41be5432e5b8b9cc --- /dev/null +++ b/patches/grpc/fix_too_early_destory.patch @@ -0,0 +1,47 @@ +diff --git a/include/grpcpp/impl/codegen/completion_queue.h b/include/grpcpp/impl/codegen/completion_queue.h +index 80c7c41982..3f7d8a7714 100644 +--- a/include/grpcpp/impl/codegen/completion_queue.h ++++ b/include/grpcpp/impl/codegen/completion_queue.h +@@ -32,6 +32,8 @@ + #ifndef GRPCPP_IMPL_CODEGEN_COMPLETION_QUEUE_H + #define GRPCPP_IMPL_CODEGEN_COMPLETION_QUEUE_H + ++#include ++ + #include + #include + #include +@@ -106,7 +108,9 @@ class CompletionQueue : private GrpcLibraryCodegen { + + /// Destructor. Destroys the owned wrapped completion queue / instance. + ~CompletionQueue() { +- g_core_codegen_interface->grpc_completion_queue_destroy(cq_); ++ if (typeid(*g_core_codegen_interface).hash_code() != typeid(CoreCodegenInterface).hash_code()) { ++ g_core_codegen_interface->grpc_completion_queue_destroy(cq_); ++ } + } + + /// Tri-state return for AsyncNext: SHUTDOWN, GOT_EVENT, TIMEOUT. +diff --git a/include/grpcpp/impl/codegen/grpc_library.h b/include/grpcpp/impl/codegen/grpc_library.h +index 17c904d71a..a092b2204d 100644 +--- a/include/grpcpp/impl/codegen/grpc_library.h ++++ b/include/grpcpp/impl/codegen/grpc_library.h +@@ -19,6 +19,8 @@ + #ifndef GRPCPP_IMPL_CODEGEN_GRPC_LIBRARY_H + #define GRPCPP_IMPL_CODEGEN_GRPC_LIBRARY_H + ++#include ++ + #include + + namespace grpc { +@@ -47,7 +49,8 @@ class GrpcLibraryCodegen { + } + } + virtual ~GrpcLibraryCodegen() { +- if (grpc_init_called_) { ++ if (grpc_init_called_ && ++ typeid(*g_glip).hash_code() != typeid(GrpcLibraryInterface).hash_code()) { + GPR_CODEGEN_ASSERT(g_glip && + "gRPC library not initialized. See " + "grpc::internal::GrpcLibraryInitializer.");