You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
set_hook doesn't work properly when executing Lua with exec_async()
use anyhow::Result;use mlua::{HookTriggers,Lua};#[tokio::main]asyncfnmain() -> Result<()>{let lua = Lua::new();
lua.set_hook(HookTriggers::EVERY_LINE,move |_lua, _debug| {println!("test hook");Ok(())});
lua.load(r#" local x = 2 + 3 local y = x * 63 local z = string.len(x..", "..y) "#,).exec_async().await?;
lua.remove_hook();Ok(())}
The text was updated successfully, but these errors were encountered:
It's not a bug, this is how Lua works.
Async execution happens in coroutines, and each coroutine need to have their own hook. Setting it in main Lua thread would only update the main thread without affecting others.
The correct code for hooks in async context would be:
asyncfnmain() -> Result<()>{let lua = Lua::new();let func = lua
.load(r#" local x = 2 + 3 local y = x * 63 local z = string.len(x..", "..y) "#,).into_function()?;let thread = lua.create_thread(func)?;
thread.set_hook(HookTriggers::EVERY_LINE,move |_lua, _debug| {println!("test hook 2");Ok(())});let _:() = thread.into_async(()).await?;
lua.remove_hook();Ok(())}
set_hook doesn't work properly when executing Lua with exec_async()
The text was updated successfully, but these errors were encountered: