From 55f60ab002638f071f6535c6342a7374d3fcaed9 Mon Sep 17 00:00:00 2001 From: Cloud Wu Date: Fri, 21 Mar 2014 10:36:54 +0800 Subject: [PATCH] disable code cache by default and always register skynet.codecache --- service-src/luacode_cache.h | 2 -- service-src/service_lua.c | 36 ++++++++++++++++++++++++------------ 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/service-src/luacode_cache.h b/service-src/luacode_cache.h index 7b01c382..e03e6f7a 100644 --- a/service-src/luacode_cache.h +++ b/service-src/luacode_cache.h @@ -4,8 +4,6 @@ #include #include -const char * luacode_load(const char * key, const char * code, size_t *sz); - int luacode_loadfile(lua_State *L, const char *filename); int luacode_lib(lua_State *); diff --git a/service-src/service_lua.c b/service-src/service_lua.c index 413bb451..83245916 100644 --- a/service-src/service_lua.c +++ b/service-src/service_lua.c @@ -7,6 +7,7 @@ #include "luacompat52.h" #include "service_lua.h" #include "luaalloc.h" +#include "luacode_cache.h" #include #include @@ -17,10 +18,28 @@ //#define PREALLOCMEM (1024 * 1024) // define NOCODECACHE to disable lua code cache -//#define NOCODECACHE +#define NOCODECACHE + +#ifdef NOCODECACHE + +#define loadfile(L, name) luaL_loadfile(L,name) + +#else + +// luacode_loadfile is the same with luaL_loadfile except cache. +#define loadfile(L, name) luacode_loadfile(L,name) + +#endif + +// LUA_CACHELIB may defined in patched lua for shared proto +#ifdef LUA_CACHELIB + +#define codecache luaopen_cache + +#else + +#define codecache luacode_lib -#ifndef NOCODECACHE -#include "luacode_cache.h" #endif // time @@ -77,12 +96,7 @@ _try_load(lua_State *L, const char * path, int pathlen, const char * name) { exit(1); } tmp[namelen+pathlen-1] = '\0'; - // luacode_loadfile is the same with luaL_loadfile except cache. -#ifdef NOCODECACHE - int r = luaL_loadfile(L,tmp); -#else - int r = luacode_loadfile(L,tmp); -#endif + int r = loadfile(L,tmp); if (r == LUA_OK) { int i; for (i=namelen+pathlen-2;i>=0;i--) { @@ -181,10 +195,8 @@ _init(struct snlua *l, struct skynet_context *ctx, const char * args) { luaL_openlibs(L); lua_pushlightuserdata(L, l); lua_setfield(L, LUA_REGISTRYINDEX, "skynet_lua"); -#ifndef NOCODECACHE - luaL_requiref(L, "skynet.codecache", luacode_lib , 0); + luaL_requiref(L, "skynet.codecache", codecache , 0); lua_pop(L,1); -#endif lua_gc(L, LUA_GCRESTART, 0); char tmp[strlen(args)+1];