3636extern int luaopen_ffi (lua_State * L );
3737extern int luaopen_jit (lua_State * L );
3838
39- #define LUA_ENGINE_NAME "LUA"
39+ #define DEFAULT_ENGINE_NAME "LUA"
4040#define REGISTRY_FUNC_CACHE_NAME "__func_cache"
4141
42+ static ValkeyModuleString * engine_name_str = NULL ;
43+ static const char * engine_name_cstr = NULL ;
44+
4245static int luajitFFIGetCurrentContext (lua_State * lua ) {
4346 lua_getfield (lua , LUA_REGISTRYINDEX , "__ffi_ctx" );
4447 return 1 ;
@@ -862,6 +865,23 @@ static int ffiSetConfig(const char *name, int val, void *privdata, ValkeyModuleS
862865 return VALKEYMODULE_OK ;
863866}
864867
868+ static ValkeyModuleString * engineNameGet (const char * name , void * privdata ) {
869+ VALKEYMODULE_NOT_USED (name );
870+ VALKEYMODULE_NOT_USED (privdata );
871+ return engine_name_str ;
872+ }
873+
874+ static int engineNameSet (const char * name , ValkeyModuleString * val , void * privdata , ValkeyModuleString * * err ) {
875+ VALKEYMODULE_NOT_USED (name );
876+ VALKEYMODULE_NOT_USED (privdata );
877+ VALKEYMODULE_NOT_USED (err );
878+ if (engine_name_str ) ValkeyModule_FreeString (NULL , engine_name_str );
879+ ValkeyModule_RetainString (NULL , val );
880+ engine_name_str = val ;
881+ engine_name_cstr = ValkeyModule_StringPtrLen (val , NULL );
882+ return VALKEYMODULE_OK ;
883+ }
884+
865885static luajitEngineCtx * engine_ctx = NULL ;
866886
867887int ValkeyModule_OnLoad (ValkeyModuleCtx * ctx ,
@@ -889,8 +909,25 @@ int ValkeyModule_OnLoad(ValkeyModuleCtx *ctx,
889909 return VALKEYMODULE_ERR ;
890910 }
891911
912+ if (ValkeyModule_RegisterStringConfig (ctx ,
913+ "engine-name" ,
914+ DEFAULT_ENGINE_NAME ,
915+ VALKEYMODULE_CONFIG_IMMUTABLE ,
916+ engineNameGet ,
917+ engineNameSet ,
918+ NULL ,
919+ NULL ) == VALKEYMODULE_ERR ) {
920+ ValkeyModule_Log (ctx , "warning" , "Failed to register engine-name config" );
921+ return VALKEYMODULE_ERR ;
922+ }
923+
892924 engine_ctx = createEngineContext (ctx );
893925
926+ if (!engine_name_str ) {
927+ engine_name_str = ValkeyModule_CreateString (NULL , DEFAULT_ENGINE_NAME , strlen (DEFAULT_ENGINE_NAME ));
928+ engine_name_cstr = ValkeyModule_StringPtrLen (engine_name_str , NULL );
929+ }
930+
894931 if (ValkeyModule_LoadConfigs (ctx ) == VALKEYMODULE_ERR ) {
895932 ValkeyModule_Log (ctx , "warning" , "Failed to load LuaJIT module configs" );
896933 destroyEngineContext (engine_ctx );
@@ -920,12 +957,12 @@ int ValkeyModule_OnLoad(ValkeyModuleCtx *ctx,
920957 };
921958
922959 int result = ValkeyModule_RegisterScriptingEngine (ctx ,
923- LUA_ENGINE_NAME ,
960+ engine_name_cstr ,
924961 engine_ctx ,
925962 & methods );
926963
927964 if (result == VALKEYMODULE_ERR ) {
928- ValkeyModule_Log (ctx , "warning" , "Failed to register LUA scripting engine" );
965+ ValkeyModule_Log (ctx , "warning" , "Failed to register '%s' scripting engine" , engine_name_cstr );
929966 destroyEngineContext (engine_ctx );
930967 engine_ctx = NULL ;
931968 return VALKEYMODULE_ERR ;
@@ -935,20 +972,26 @@ int ValkeyModule_OnLoad(ValkeyModuleCtx *ctx,
935972
936973 ValkeyModule_Log (ctx , "notice" ,
937974 "LuaJIT scripting engine registered as '%s' (per-user isolation)" ,
938- LUA_ENGINE_NAME );
975+ engine_name_cstr );
939976
940977 return VALKEYMODULE_OK ;
941978}
942979
943980int ValkeyModule_OnUnload (ValkeyModuleCtx * ctx ) {
944- if (ValkeyModule_UnregisterScriptingEngine (ctx , LUA_ENGINE_NAME ) != VALKEYMODULE_OK ) {
981+ if (ValkeyModule_UnregisterScriptingEngine (ctx , engine_name_cstr ) != VALKEYMODULE_OK ) {
945982 ValkeyModule_Log (ctx , "error" , "Failed to unregister LuaJIT engine" );
946983 return VALKEYMODULE_ERR ;
947984 }
948985
949986 destroyEngineContext (engine_ctx );
950987 engine_ctx = NULL ;
951988
989+ if (engine_name_str ) {
990+ ValkeyModule_FreeString (NULL , engine_name_str );
991+ engine_name_str = NULL ;
992+ engine_name_cstr = NULL ;
993+ }
994+
952995 ValkeyModule_Log (ctx , "notice" , "LuaJIT scripting engine unloaded" );
953996
954997 return VALKEYMODULE_OK ;
0 commit comments