@ -163,7 +163,6 @@ namespace dm_lua {
delete out ;
out = NULL ;
}
lua_close ( state ) ;
}
bool init_call ( const char * func )
{
@ -1873,6 +1872,12 @@ static bool set_monitoring_mode(const string &mode, const bool &state)
if ( ! is_enabled )
return false ;
/*
NOTE : although we are not touching DF directly but there might be
code running that uses these values . So this could use another mutex
or just suspend the core while we edit our values .
*/
CoreSuspender guard ;
if ( mode = = " work " | | mode = = " all " )
{
@ -1908,7 +1913,10 @@ static bool load_config()
DFhackCExport command_result plugin_enable ( color_ostream & out , bool enable )
{
if ( enable )
{
CoreSuspender guard ;
load_config ( ) ;
}
if ( is_enabled ! = enable )
{
if ( ! INTERPOSE_HOOK ( dwarf_monitor_hook , render ) . apply ( enable ) )
@ -1963,16 +1971,19 @@ static command_result dwarfmonitor_cmd(color_ostream &out, vector <string> & par
}
else if ( cmd = = ' s ' | | cmd = = ' S ' )
{
CoreSuspender guard ;
if ( Maps : : IsValid ( ) )
Screen : : show ( dts : : make_unique < ViewscreenFortStats > ( ) , plugin_self ) ;
}
else if ( cmd = = ' p ' | | cmd = = ' P ' )
{
CoreSuspender guard ;
if ( Maps : : IsValid ( ) )
Screen : : show ( dts : : make_unique < ViewscreenPreferences > ( ) , plugin_self ) ;
}
else if ( cmd = = ' r ' | | cmd = = ' R ' )
{
CoreSuspender guard ;
load_config ( ) ;
}
else
@ -2024,7 +2035,7 @@ DFhackCExport command_result plugin_init(color_ostream &out, std::vector <Plugin
" Reload configuration file (dfhack-config/dwarfmonitor.json) \n "
) ) ;
dm_lua : : state = Lua : : Open ( out ) ;
dm_lua : : state = Lua : : Core : : State ;
if ( dm_lua : : state = = NULL )
return CR_FAILURE ;