lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


> Under the assumption that function pointers are atomic, perhaps
> there's a way to fix the CallInfo race, the Undefined Behavior with C
> threads, and being unable to stop a coroutine, all at once: add the
> concept of a "global hook". Here's how I think it could work:
> 
> * Create a new function called "lua_noophook" that just returns
> without doing anything.
> * Add a single "volatile" function pointer to global_State called
> "globalhook", that points to lua_noophook by default.
> * Everywhere that we check to run hooks now, also unconditionally call
> the "G(L)->globalhook" function pointer, as if it were a LUA_MASKCOUNT
> hook with a count of 1.
> 
> I think that would have the desired semantics in almost every case
> today that currently sets a hook asynchronously. (And in the uncommon
> case of wanting to do something else, you could do it from the global
> hook, and then reset it back to lua_noophook.)
> 
> Does this seem like a good solution?

Any estimates of the runtime cost of this implementation?

-- Roberto