int lua_sethook (lua_State *L, lua_Hook f, int mask, int count);
The current API does not allow giving upvalues to the hook function from C API. This would be required in multithreading scenarios where several Lua states may be using the same lua_Hook function.
My current bypass is to tie a userdata via registry, but that registry access needs to be unwrapped each time the hook runs, which may be a lot.
Suggestion for future API:
int lua_sethook_x (lua_State *L, lua_Hook f, unsigned upvalues, int mask, int count);
#define lua_sethook(L,f,mask,count) lua_sethook_x(L,f,0,mask,count);