Commit graph

2 commits

Author SHA1 Message Date
Chengyi Zhao
2e00356c98 lib: core: add prepare_shutdown vfunc to fix Lua GC crash on exit
When WirePlumber exits, it crashes with SIGABRT. The backtrace shows:

  7  g_closure_invalidate
  10 g_object_unref
  15 g_value_unset
  16 _wplua_gvalue_userdata___gc
  26 close_state (lua_close)
  27 wp_plugin_deactivate
  33 wp_registry_clear
  34 wp_core_dispose

Root cause: lua_State is referenced by both the main plugin and each
WpLuaScript object. During registry cleanup, scripts call lua_close again
on an already-destroyed state, causing use-after-free.

Fix:
- Add a prepare_shutdown vfunc in WpPlugin. Call it from wp_core_dispose
  *before* clearing the registry.
- Lua plugin implements prepare_shutdown to close its lua_State early,
  allowing all __gc finalizers to run while GObjects are still alive.
- Then clear the lua_State pointer from every WpLuaScript object via
  wp_lua_script_clear_lua_state().
- Guard WpLuaScript finalize to skip if pointer is already NULL.
2026-05-08 14:44:44 +08:00
George Kiagiadakis
ecb6100b77 m-lua-scripting: wrap every script in a WpPlugin and expose async activation api
This allows scripts to declare when they have finished their loading,
so we can now also know when wireplumber is done loading and ready to
handle clients

Related to !313
2022-04-23 20:14:59 +03:00