From 68c66fe3b1edf9c74d2c523e595d4791c6181739 Mon Sep 17 00:00:00 2001 From: Chad Allee <83376129+chadallee@users.noreply.github.com> Date: Thu, 18 Aug 2022 19:03:02 -0500 Subject: [PATCH] LVRT crash was because RTSetCleanupProc was null. (#114) * LVRT crash was because RTSetCleanupProc was null. Now it works * All this extra logic is dumb (and was broken). Just assume liblvrt.so is already loaded --- src/lv_interop.cc | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/src/lv_interop.cc b/src/lv_interop.cc index d42fe0d2..a359e6d6 100644 --- a/src/lv_interop.cc +++ b/src/lv_interop.cc @@ -4,6 +4,7 @@ #include #include #include +#include #ifndef _WIN32 #include @@ -69,21 +70,17 @@ namespace grpc_labview return; } - auto lvModule = dlopen(nullptr, RTLD_LAZY); - if (lvModule != nullptr) - { - NumericArrayResizeImp = (NumericArrayResize_T)dlsym(lvModule, "NumericArrayResize"); - PostLVUserEvent = (PostLVUserEvent_T)dlsym(lvModule, "PostLVUserEvent"); - Occur = (Occur_T)dlsym(lvModule, "Occur"); - } - if (NumericArrayResize == nullptr) + NumericArrayResizeImp = (NumericArrayResize_T)dlsym(RTLD_DEFAULT, "NumericArrayResize"); + PostLVUserEvent = (PostLVUserEvent_T)dlsym(RTLD_DEFAULT, "PostLVUserEvent"); + Occur = (Occur_T)dlsym(RTLD_DEFAULT, "Occur"); + RTSetCleanupProc = (RTSetCleanupProc_T)dlsym(RTLD_DEFAULT, "RTSetCleanupProc"); + + if (NumericArrayResizeImp == nullptr || + PostLVUserEvent == nullptr || + Occur == nullptr || + RTSetCleanupProc == nullptr) { - std::cout << "Loading LabVIEW Runtime engine!" << std::endl; - lvModule = dlopen("liblvrt.so", RTLD_NOW); - NumericArrayResizeImp = (NumericArrayResize_T)dlsym(lvModule, "NumericArrayResize"); - PostLVUserEvent = (PostLVUserEvent_T)dlsym(lvModule, "PostLVUserEvent"); - Occur = (Occur_T)dlsym(lvModule, "Occur"); - RTSetCleanupProc = (RTSetCleanupProc_T)dlsym(lvModule, "RTSetCleanupProc"); + exit(grpc::StatusCode::INTERNAL); } }