mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-29 07:24:55 +00:00 
			
		
		
		
	Add a datastore fixup to fix a pbx_lua crash.
(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.8@317476 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -85,6 +85,7 @@ static void lua_create_autoservice_functions(lua_State *L); | ||||
| static void lua_create_hangup_function(lua_State *L); | ||||
|  | ||||
| static 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 @@ static 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) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user