]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Add a datastore fixup to fix a pbx_lua crash.
authorMatthew Nicholson <mnicholson@digium.com>
Fri, 6 May 2011 15:18:46 +0000 (15:18 +0000)
committerMatthew Nicholson <mnicholson@digium.com>
Fri, 6 May 2011 15:18:46 +0000 (15:18 +0000)
(closes issue #19055)
Reported by: jamhed
Patches:
      lua_datastore_fixup1.diff uploaded by mnicholson (license 96)
Tested by: mnicholson, jamhed

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.2@317666 65c4cc65-6c06-0410-ace0-fbb531ad65f3

pbx/pbx_lua.c

index c9ac561038ab513abec574082b9b9fe9cfbf6f64..c22dab5567e642417d79db78ecc1e583bcd0cf35 100644 (file)
@@ -85,6 +85,7 @@ static void lua_create_autoservice_functions(lua_State *L);
 static void lua_create_hangup_function(lua_State *L);
 
 void lua_state_destroy(void *data);
+static void lua_datastore_fixup(void *data, struct ast_channel *old_chan, struct ast_channel *new_chan);
 static lua_State *lua_get_state(struct ast_channel *chan);
 
 static int exists(struct ast_channel *chan, const char *context, const char *exten, int priority, const char *callerid, const char *data);
@@ -102,6 +103,7 @@ static struct ast_hashtab *local_table = NULL;
 static const struct ast_datastore_info lua_datastore = {
        .type = "lua",
        .destroy = lua_state_destroy,
+       .chan_fixup = lua_datastore_fixup,
 };
 
 
@@ -114,6 +116,21 @@ void lua_state_destroy(void *data)
                lua_close(data);
 }
 
+/*!
+ * \brief The fixup function for the lua_datastore.
+ * \param data the datastore data, in this case it will be a lua_State
+ * \param old_chan the channel we are moving from
+ * \param new_chan the channel we are moving to
+ *
+ * This function updates our internal channel pointer.
+ */
+static void lua_datastore_fixup(void *data, struct ast_channel *old_chan, struct ast_channel *new_chan)
+{
+       lua_State *L = data;
+       lua_pushlightuserdata(L, new_chan);
+       lua_setfield(L, LUA_REGISTRYINDEX, "channel");
+}
+
 /*!
  * \brief [lua_CFunction] Find an app and return it in a lua table (for access from lua, don't
  * call directly)