Module: sip-router
Branch: master
Commit: f9a7a9476f3d925fbfbde706ff7690423e96e7c8
URL:    
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=f9a7a9476f3d925fbfbde706ff7690423e96e7c8

Author: Daniel-Constantin Mierla <[email protected]>
Committer: Daniel-Constantin Mierla <[email protected]>
Date:   Fri Mar 29 12:05:17 2013 +0100

app_lua: moved local array for reload as global variable

- avoid runtime allocation/free for each execution when reload is
  enabled
- renamed sr_reload to _app_lua_sr_reload for better namespacing
  conflict resolution

---

 modules/app_lua/app_lua_api.c |   35 ++++++++++++++++++++++-------------
 1 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/modules/app_lua/app_lua_api.c b/modules/app_lua/app_lua_api.c
index 384b29b..0ec9123 100644
--- a/modules/app_lua/app_lua_api.c
+++ b/modules/app_lua/app_lua_api.c
@@ -46,13 +46,18 @@
  * reload enabled param
  * default: 0 (off)
  */
-static unsigned int sr_reload = 0;
+static unsigned int _app_lua_sr_reload = 0;
 /**
  *
  */
 static sr_lua_env_t _sr_L_env;
 
 /**
+ *
+ */
+static int *_app_lua_sv = NULL;
+
+/**
  * @return the static Lua env
  */
 sr_lua_env_t *sr_lua_env_get(void)
@@ -166,7 +171,7 @@ int sr_lua_reload_module(unsigned int reload)
 {
        LM_DBG("reload:%d\n", reload);
        if(reload!=0) {
-               sr_reload = 1;
+               _app_lua_sr_reload = 1;
                LM_DBG("reload param activated!\n");
        }
        return 0;
@@ -377,7 +382,7 @@ int lua_sr_reload_script(int pos)
                        LM_CRIT("shm for version not allocated\n");
                        return -1;
                }
-               if (sr_reload==0)
+               if (_app_lua_sr_reload==0)
                {
                        LM_ERR("reload is not activated\n");
                        return -3;
@@ -422,9 +427,7 @@ int sr_lua_reload_script(void)
        sr_lua_load_t *li = _sr_lua_load_list;
        int ret, i;
        char *txt;
-
        int sv_len = sr_lua_script_ver->len;
-       int *sv = (int *) pkg_malloc(sizeof(int)*sv_len);
 
        if(li==NULL)
        {
@@ -432,16 +435,25 @@ int sr_lua_reload_script(void)
                return 0;
        }
 
+       if(_app_lua_sv==NULL) {
+               _app_lua_sv = (int *) pkg_malloc(sizeof(int)*sv_len);
+               if(_app_lua_sv==NULL)
+               {
+                       LM_ERR("no more pkg memory\n");
+                       return -1;
+               }
+       }
+
        for(i=0;i<sv_len;i++)
        {
                lock_set_get(sr_lua_locks, i);
-               sv[i] = sr_lua_script_ver->version[i];
+               _app_lua_sv[i] = sr_lua_script_ver->version[i];
                lock_set_release(sr_lua_locks, i);
 
-               if(li->version!=sv[i])
+               if(li->version!=_app_lua_sv[i])
                {
                        LM_DBG("loaded version:%d needed: %d Let's reload 
<%s>\n",
-                               li->version, sv[i], li->script);
+                               li->version, _app_lua_sv[i], li->script);
                        ret = luaL_dofile(_sr_L_env.LL, (const 
char*)li->script);
                        if(ret!=0)
                        {
@@ -450,18 +462,15 @@ int sr_lua_reload_script(void)
                                txt = (char*)lua_tostring(_sr_L_env.LL, -1);
                                LM_ERR("error from Lua: %s\n", 
(txt)?txt:"unknown");
                                lua_pop(_sr_L_env.LL, 1);
-                               lua_sr_destroy();
-                               pkg_free(sv);
                                return -1;
                        }
-                       li->version = sv[i];
+                       li->version = _app_lua_sv[i];
                        LM_DBG("<%s> set to version %d\n", li->script, 
li->version);
                }
                else LM_DBG("No need to reload [%s] is version %d\n",
                        li->script, li->version);
                li = li->next;
        }
-       pkg_free(sv);
        return 1;
 }
 
@@ -611,7 +620,7 @@ int app_lua_run(struct sip_msg *msg, char *func, char *p1, 
char *p2,
                LM_ERR("lua loading state not initialized (call: %s)\n", func);
                return -1;
        }
-       if(sr_reload!=0)
+       if(_app_lua_sr_reload!=0)
        {
                /* check the script version loaded */
                if(!sr_lua_reload_script())


_______________________________________________
sr-dev mailing list
[email protected]
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to