2020static PluginInfo g_plugins [MAX_PLUGINS ];
2121static int g_pluginCount = 0 ;
2222static CRITICAL_SECTION g_pluginCS ;
23+ static BOOL g_pluginManagerInitialized = FALSE;
2324
2425/* Hot-reload monitoring */
2526static HANDLE g_hHotReloadThread = NULL ;
@@ -113,6 +114,7 @@ static void ExtractDisplayName(const wchar_t* filename, wchar_t* displayName, si
113114
114115void PluginManager_Init (void ) {
115116 InitializeCriticalSection (& g_pluginCS );
117+ g_pluginManagerInitialized = TRUE;
116118 memset (g_plugins , 0 , sizeof (g_plugins ));
117119 g_pluginCount = 0 ;
118120
@@ -130,6 +132,8 @@ void PluginManager_Init(void) {
130132}
131133
132134void PluginManager_Shutdown (void ) {
135+ if (!g_pluginManagerInitialized ) return ;
136+
133137 /* Stop hot-reload thread */
134138 if (g_hHotReloadThread ) {
135139 g_hotReloadRunning = FALSE;
@@ -188,6 +192,7 @@ int PluginManager_ScanPlugins(void) {
188192
189193 LOG_INFO ("Scanning plugin directory: %s" , pluginDirA );
190194
195+ if (!g_pluginManagerInitialized ) return 0 ;
191196 EnterCriticalSection (& g_pluginCS );
192197
193198 // Scan into temporary list to preserve state
@@ -334,6 +339,7 @@ void PluginManager_RequestScanAsync(void) {
334339}
335340
336341int PluginManager_GetPluginCount (void ) {
342+ if (!g_pluginManagerInitialized ) return 0 ;
337343 int count ;
338344 EnterCriticalSection (& g_pluginCS );
339345 count = g_pluginCount ;
@@ -379,6 +385,7 @@ static void StopPluginInternal(int index) {
379385}
380386
381387BOOL PluginManager_StartPlugin (int index ) {
388+ if (!g_pluginManagerInitialized ) return FALSE;
382389 if (index < 0 || index >= g_pluginCount ) {
383390 return FALSE;
384391 }
@@ -501,6 +508,7 @@ static BOOL RestartPluginInternal(int index) {
501508}
502509
503510BOOL PluginManager_StopPlugin (int index ) {
511+ if (!g_pluginManagerInitialized ) return FALSE;
504512 if (index < 0 || index >= g_pluginCount ) {
505513 return FALSE;
506514 }
@@ -529,6 +537,7 @@ BOOL PluginManager_StopPlugin(int index) {
529537}
530538
531539BOOL PluginManager_TogglePlugin (int index ) {
540+ if (!g_pluginManagerInitialized ) return FALSE;
532541 if (index < 0 || index >= g_pluginCount ) {
533542 return FALSE;
534543 }
@@ -541,6 +550,7 @@ BOOL PluginManager_TogglePlugin(int index) {
541550}
542551
543552BOOL PluginManager_IsPluginRunning (int index ) {
553+ if (!g_pluginManagerInitialized ) return FALSE;
544554 if (index < 0 || index >= g_pluginCount ) {
545555 return FALSE;
546556 }
@@ -562,6 +572,7 @@ BOOL PluginManager_IsPluginRunning(int index) {
562572}
563573
564574void PluginManager_StopAllPlugins (void ) {
575+ if (!g_pluginManagerInitialized ) return ;
565576 EnterCriticalSection (& g_pluginCS );
566577 for (int i = 0 ; i < g_pluginCount ; i ++ ) {
567578 if (g_plugins [i ].isRunning ) {
0 commit comments