Changeset 8

User picture

Author: hollowlife1987

(2007/10/24 20:24) Over 4 years ago

Added concurency control.

Affected files

Updated Generica/trunk/ws2_32/Plugin.cpp Download diff

78
28
28
29
list<Plugin*> Plugin::s_Plugins;
29
list<Plugin*> Plugin::s_Plugins;
30
list<Plugin*>::iterator Plugin::s_iter = s_Plugins.begin();
30
list<Plugin*>::iterator Plugin::s_iter = s_Plugins.begin();
31
HANDLE Plugin::s_PluginMutex = CreateMutex(NULL, false, "GenericaPluginMutex");
31
32
32
Plugin::Plugin(CString strPluginName)
33
Plugin::Plugin(CString strPluginName)
33
{
34
{
...
...
57
58
58
void Plugin::RegisterProc(HMODULE hDllModule, CString strProcName, PROC proc)
59
void Plugin::RegisterProc(HMODULE hDllModule, CString strProcName, PROC proc)
59
{
60
{
61
	WaitForSingleObject(s_PluginMutex, INFINITE);
62
60
	for(s_iter = s_Plugins.begin(); s_iter != s_Plugins.end(); s_iter++)
63
	for(s_iter = s_Plugins.begin(); s_iter != s_Plugins.end(); s_iter++)
61
	{
64
	{
62
		if((*s_iter)->m_PluginModule == hDllModule)
65
		if((*s_iter)->m_PluginModule == hDllModule)
63
		{
66
		{
64
			(*s_iter)->m_procs[strProcName] = proc;
67
			(*s_iter)->m_procs[strProcName] = proc;
65
			return;
68
			break;
66
		}
69
		}
67
	}
70
	}
71
72
	ReleaseMutex(s_PluginMutex);
68
}
73
}
69
74
70
PROC Plugin::GetProc(HMODULE hDllModule, CString strProcName)
75
PROC Plugin::GetProc(HMODULE hDllModule, CString strProcName)
71
{
76
{
77
	WaitForSingleObject(s_PluginMutex, INFINITE);
78
79
	PROC ret = NULL;
80
72
	if(s_iter == s_Plugins.end())
81
	if(s_iter == s_Plugins.end())
73
		s_iter = s_Plugins.begin();
82
		s_iter = s_Plugins.begin();
74
83
...
...
77
		if((*s_iter)->m_procs[strProcName] == NULL || (*s_iter)->m_PluginModule == hDllModule)
86
		if((*s_iter)->m_procs[strProcName] == NULL || (*s_iter)->m_PluginModule == hDllModule)
78
			continue;
87
			continue;
79
88
80
		return (*s_iter)->m_procs[strProcName];
89
		ret = (*s_iter)->m_procs[strProcName];
90
91
		break;
81
	}
92
	}
82
93
83
	return NULL;
94
	ReleaseMutex(s_PluginMutex);
95
96
	return ret;
84
}
97
}
85
98
86
list<Plugin*>::iterator Plugin::GetHead()
99
list<Plugin*>::iterator Plugin::GetHead()

Updated Generica/trunk/ws2_32/Plugin.h Download diff

78
45
	map<CString, PROC> m_procs;
45
	map<CString, PROC> m_procs;
46
	static list<Plugin*> s_Plugins;
46
	static list<Plugin*> s_Plugins;
47
	static list<Plugin*>::iterator s_iter;
47
	static list<Plugin*>::iterator s_iter;
48
	static HANDLE s_PluginMutex;
48
49
49
};
50
};

Updated Generica/trunk/ws2_32/ws2_32.vcproj Download diff

78
45
				BasicRuntimeChecks="3"
45
				BasicRuntimeChecks="3"
46
				RuntimeLibrary="3"
46
				RuntimeLibrary="3"
47
				UsePrecompiledHeader="0"
47
				UsePrecompiledHeader="0"
48
				AssemblerOutput="1"
49
				AssemblerListingLocation=""
48
				WarningLevel="3"
50
				WarningLevel="3"
49
				Detect64BitPortabilityProblems="true"
51
				Detect64BitPortabilityProblems="true"
50
				DebugInformationFormat="4"
52
				DebugInformationFormat="4"