Index: synchro.cpp
===================================================================
--- synchro.cpp	(revision 5274)
+++ synchro.cpp	(working copy)
@@ -35,6 +35,7 @@
 #include "synchro.hpp"
 #include "plclass.hpp"
 #include "plugin.hpp"
+#include "ctrlobj.hpp"
 
 #include "adminmode.hpp"
 
@@ -95,7 +96,8 @@
 			{
 				Plugin* pPlugin=(Plugin*)module;
 
-				if (pPlugin)
+				// Здесь не проверялась валидность pPlugin. Он мог быть выгружен (например через FarCmd -> unload:)
+				if (pPlugin && CtrlObject->Plugins.IsPluginValid(pPlugin))
 				{
 					pPlugin->ProcessSynchroEvent(SE_COMMONSYNCHRO,param);
 					res=true;
Index: plugins.cpp
===================================================================
--- plugins.cpp	(revision 5274)
+++ plugins.cpp	(working copy)
@@ -484,6 +484,20 @@
 	return nullptr;
 }
 
+bool PluginManager::IsPluginValid(Plugin *pPlugin)
+{
+	Plugin *pTest;
+
+	for (int i = 0; i < PluginsCount; i++)
+	{
+		pTest = PluginsData[i];
+		if (pTest == pPlugin)
+			return true;
+	}
+
+	return false;
+}
+
 void PluginManager::LoadPlugins()
 {
 	TaskBar TB(false);
Index: plugins.hpp
===================================================================
--- plugins.hpp	(revision 5274)
+++ plugins.hpp	(working copy)
@@ -200,6 +200,7 @@
 
 		Plugin *GetPlugin(const wchar_t *lpwszModuleName);
 		Plugin *GetPlugin(int PluginNumber);
+		bool IsPluginValid(Plugin *pPlugin);
 
 		int GetPluginsCount() { return PluginsCount; }
 		int GetOemPluginsCount() { return OemPluginsCount; }
