From 59bfad51e8083cabd396930906664fd23cc0c06e Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Mon, 24 Jan 2022 09:59:05 +0100 Subject: [PATCH] dnsdist: Save 60 kB on the Lua FFI wrappers Moving the definition of the Lua FFI wrappers outside a function avoids a copy to be constructed on the first usage of that function. Using an array of chars instead of a string prevents a second copy from occurring at startup. --- pdns/dnsdistdist/dnsdist-lua-ffi.cc | 16 ++++++++-------- pdns/dnsdistdist/dnsdist-lua-ffi.hh | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pdns/dnsdistdist/dnsdist-lua-ffi.cc b/pdns/dnsdistdist/dnsdist-lua-ffi.cc index 420e13f933..4a61e942f7 100644 --- a/pdns/dnsdistdist/dnsdist-lua-ffi.cc +++ b/pdns/dnsdistdist/dnsdist-lua-ffi.cc @@ -618,21 +618,21 @@ void dnsdist_ffi_dnsresponse_clear_records_type(dnsdist_ffi_dnsresponse_t* dr, u } } -const std::string& getLuaFFIWrappers() -{ - static const std::string interface = -#include "dnsdist-lua-ffi-interface.inc" - ; - static const std::string code = R"FFICodeContent( +static constexpr char s_lua_ffi_code[] = R"FFICodeContent( local ffi = require("ffi") local C = ffi.C ffi.cdef[[ -)FFICodeContent" + interface + R"FFICodeContent( +)FFICodeContent" +#include "dnsdist-lua-ffi-interface.inc" +R"FFICodeContent( ]] )FFICodeContent"; - return code; + +const char* getLuaFFIWrappers() +{ + return s_lua_ffi_code; } void setupLuaLoadBalancingContext(LuaContext& luaCtx) diff --git a/pdns/dnsdistdist/dnsdist-lua-ffi.hh b/pdns/dnsdistdist/dnsdist-lua-ffi.hh index 24ebe85d0b..6971d3cd77 100644 --- a/pdns/dnsdistdist/dnsdist-lua-ffi.hh +++ b/pdns/dnsdistdist/dnsdist-lua-ffi.hh @@ -128,5 +128,5 @@ struct dnsdist_ffi_servers_list_t const ServerPolicy::NumberedServerVector& servers; }; -const std::string& getLuaFFIWrappers(); +const char* getLuaFFIWrappers(); void setupLuaFFIPerThreadContext(LuaContext& luaCtx); -- 2.47.2