1
0
Fork 0

Get rid of the _GUI locks in the pluginmenu* API implementation

This should increase stability and (potentially) restore XP support
This commit is contained in:
Duncan Ogilvie 2022-12-03 22:18:35 +01:00
parent 3ba63be199
commit af79a9b70b
2 changed files with 18 additions and 18 deletions

View File

@ -213,7 +213,7 @@ bool pluginload(const char* pluginName, bool loadall)
//add plugin menus //add plugin menus
{ {
SectionLocker<LockPluginMenuList, false, true> menuLock; //exclusive lock SectionLocker<LockPluginMenuList, false, false> menuLock; //exclusive lock
auto addPluginMenu = [](GUIMENUTYPE type) auto addPluginMenu = [](GUIMENUTYPE type)
{ {
@ -624,7 +624,7 @@ int pluginmenuadd(int hMenu, const char* title)
{ {
if(!title || !strlen(title)) if(!title || !strlen(title))
return -1; return -1;
EXCLUSIVE_ACQUIRE_GUI(LockPluginMenuList); EXCLUSIVE_ACQUIRE(LockPluginMenuList);
int nFound = -1; int nFound = -1;
for(unsigned int i = 0; i < pluginMenuList.size(); i++) for(unsigned int i = 0; i < pluginMenuList.size(); i++)
{ {
@ -656,7 +656,7 @@ bool pluginmenuaddentry(int hMenu, int hEntry, const char* title)
{ {
if(!title || !strlen(title) || hEntry == -1) if(!title || !strlen(title) || hEntry == -1)
return false; return false;
EXCLUSIVE_ACQUIRE_GUI(LockPluginMenuList); EXCLUSIVE_ACQUIRE(LockPluginMenuList);
int pluginHandle = -1; int pluginHandle = -1;
//find plugin handle //find plugin handle
for(const auto & currentMenu : pluginMenuList) for(const auto & currentMenu : pluginMenuList)
@ -692,7 +692,7 @@ bool pluginmenuaddentry(int hMenu, int hEntry, const char* title)
*/ */
bool pluginmenuaddseparator(int hMenu) bool pluginmenuaddseparator(int hMenu)
{ {
SHARED_ACQUIRE_GUI(LockPluginMenuList); SHARED_ACQUIRE(LockPluginMenuList);
for(const auto & currentMenu : pluginMenuList) for(const auto & currentMenu : pluginMenuList)
{ {
if(currentMenu.hEntryMenu == hMenu) if(currentMenu.hEntryMenu == hMenu)
@ -736,7 +736,7 @@ static void pluginmenuclear_helper(int hMenu)
*/ */
bool pluginmenuclear(int hMenu, bool erase) bool pluginmenuclear(int hMenu, bool erase)
{ {
EXCLUSIVE_ACQUIRE_GUI(LockPluginMenuList); EXCLUSIVE_ACQUIRE(LockPluginMenuList);
pluginmenuclear_helper(hMenu); pluginmenuclear_helper(hMenu);
for(auto it = pluginMenuList.begin(); it != pluginMenuList.end(); ++it) for(auto it = pluginMenuList.begin(); it != pluginMenuList.end(); ++it)
{ {
@ -765,7 +765,7 @@ void pluginmenucall(int hEntry)
if(hEntry == -1) if(hEntry == -1)
return; return;
SectionLocker<LockPluginMenuList, true, true> menuLock; //shared lock SectionLocker<LockPluginMenuList, true, false> menuLock; //shared lock
auto i = pluginMenuEntryList.begin(); auto i = pluginMenuEntryList.begin();
while(i != pluginMenuEntryList.end()) while(i != pluginMenuEntryList.end())
{ {
@ -829,7 +829,7 @@ bool pluginwineventglobal(MSG* message)
*/ */
void pluginmenuseticon(int hMenu, const ICONDATA* icon) void pluginmenuseticon(int hMenu, const ICONDATA* icon)
{ {
SHARED_ACQUIRE_GUI(LockPluginMenuList); SHARED_ACQUIRE(LockPluginMenuList);
for(const auto & currentMenu : pluginMenuList) for(const auto & currentMenu : pluginMenuList)
{ {
if(currentMenu.hEntryMenu == hMenu) if(currentMenu.hEntryMenu == hMenu)
@ -850,7 +850,7 @@ void pluginmenuentryseticon(int pluginHandle, int hEntry, const ICONDATA* icon)
{ {
if(hEntry == -1) if(hEntry == -1)
return; return;
SHARED_ACQUIRE_GUI(LockPluginMenuList); SHARED_ACQUIRE(LockPluginMenuList);
for(const auto & currentMenu : pluginMenuEntryList) for(const auto & currentMenu : pluginMenuEntryList)
{ {
if(currentMenu.pluginHandle == pluginHandle && currentMenu.hEntryPlugin == hEntry) if(currentMenu.pluginHandle == pluginHandle && currentMenu.hEntryPlugin == hEntry)
@ -865,7 +865,7 @@ void pluginmenuentrysetchecked(int pluginHandle, int hEntry, bool checked)
{ {
if(hEntry == -1) if(hEntry == -1)
return; return;
SHARED_ACQUIRE_GUI(LockPluginMenuList); SHARED_ACQUIRE(LockPluginMenuList);
for(const auto & currentMenu : pluginMenuEntryList) for(const auto & currentMenu : pluginMenuEntryList)
{ {
if(currentMenu.pluginHandle == pluginHandle && currentMenu.hEntryPlugin == hEntry) if(currentMenu.pluginHandle == pluginHandle && currentMenu.hEntryPlugin == hEntry)
@ -878,7 +878,7 @@ void pluginmenuentrysetchecked(int pluginHandle, int hEntry, bool checked)
void pluginmenusetvisible(int pluginHandle, int hMenu, bool visible) void pluginmenusetvisible(int pluginHandle, int hMenu, bool visible)
{ {
SHARED_ACQUIRE_GUI(LockPluginMenuList); SHARED_ACQUIRE(LockPluginMenuList);
for(const auto & currentMenu : pluginMenuList) for(const auto & currentMenu : pluginMenuList)
{ {
if(currentMenu.hEntryMenu == hMenu) if(currentMenu.hEntryMenu == hMenu)
@ -893,7 +893,7 @@ void pluginmenuentrysetvisible(int pluginHandle, int hEntry, bool visible)
{ {
if(hEntry == -1) if(hEntry == -1)
return; return;
SHARED_ACQUIRE_GUI(LockPluginMenuList); SHARED_ACQUIRE(LockPluginMenuList);
for(const auto & currentMenu : pluginMenuEntryList) for(const auto & currentMenu : pluginMenuEntryList)
{ {
if(currentMenu.pluginHandle == pluginHandle && currentMenu.hEntryPlugin == hEntry) if(currentMenu.pluginHandle == pluginHandle && currentMenu.hEntryPlugin == hEntry)
@ -908,7 +908,7 @@ void pluginmenusetname(int pluginHandle, int hMenu, const char* name)
{ {
if(!name) if(!name)
return; return;
SHARED_ACQUIRE_GUI(LockPluginMenuList); SHARED_ACQUIRE(LockPluginMenuList);
for(const auto & currentMenu : pluginMenuList) for(const auto & currentMenu : pluginMenuList)
{ {
if(currentMenu.hEntryMenu == hMenu) if(currentMenu.hEntryMenu == hMenu)
@ -923,7 +923,7 @@ void pluginmenuentrysetname(int pluginHandle, int hEntry, const char* name)
{ {
if(hEntry == -1 || !name) if(hEntry == -1 || !name)
return; return;
SHARED_ACQUIRE_GUI(LockPluginMenuList); SHARED_ACQUIRE(LockPluginMenuList);
for(const auto & currentMenu : pluginMenuEntryList) for(const auto & currentMenu : pluginMenuEntryList)
{ {
if(currentMenu.pluginHandle == pluginHandle && currentMenu.hEntryPlugin == hEntry) if(currentMenu.pluginHandle == pluginHandle && currentMenu.hEntryPlugin == hEntry)
@ -938,7 +938,7 @@ void pluginmenuentrysethotkey(int pluginHandle, int hEntry, const char* hotkey)
{ {
if(hEntry == -1 || !hotkey) if(hEntry == -1 || !hotkey)
return; return;
SHARED_ACQUIRE_GUI(LockPluginMenuList); SHARED_ACQUIRE(LockPluginMenuList);
for(const auto & currentMenu : pluginMenuEntryList) for(const auto & currentMenu : pluginMenuEntryList)
{ {
if(currentMenu.pluginHandle == pluginHandle && currentMenu.hEntryPlugin == hEntry) if(currentMenu.pluginHandle == pluginHandle && currentMenu.hEntryPlugin == hEntry)
@ -962,7 +962,7 @@ void pluginmenuentrysethotkey(int pluginHandle, int hEntry, const char* hotkey)
bool pluginmenuremove(int hMenu) bool pluginmenuremove(int hMenu)
{ {
EXCLUSIVE_ACQUIRE_GUI(LockPluginMenuList); EXCLUSIVE_ACQUIRE(LockPluginMenuList);
for(const auto & currentMenu : pluginMenuList) for(const auto & currentMenu : pluginMenuList)
if(currentMenu.hEntryMenu == hMenu && currentMenu.hParentMenu < 256) if(currentMenu.hEntryMenu == hMenu && currentMenu.hParentMenu < 256)
return false; return false;
@ -971,7 +971,7 @@ bool pluginmenuremove(int hMenu)
bool pluginmenuentryremove(int pluginHandle, int hEntry) bool pluginmenuentryremove(int pluginHandle, int hEntry)
{ {
EXCLUSIVE_ACQUIRE_GUI(LockPluginMenuList); EXCLUSIVE_ACQUIRE(LockPluginMenuList);
for(auto it = pluginMenuEntryList.begin(); it != pluginMenuEntryList.end(); ++it) for(auto it = pluginMenuEntryList.begin(); it != pluginMenuEntryList.end(); ++it)
{ {
const auto & currentEntry = *it; const auto & currentEntry = *it;

View File

@ -123,7 +123,7 @@ private:
return; return;
} }
if(threadId == m_guiMainThreadId) if(ProcessGuiEvents && threadId == m_guiMainThreadId)
{ {
while(!m_TryAcquireSRWLockExclusive(srwLock)) while(!m_TryAcquireSRWLockExclusive(srwLock))
GuiProcessEvents(); GuiProcessEvents();
@ -141,7 +141,7 @@ private:
else else
{ {
auto cr = &m_crLocks[LockIndex]; auto cr = &m_crLocks[LockIndex];
if(threadId == m_guiMainThreadId) if(ProcessGuiEvents && threadId == m_guiMainThreadId)
{ {
while(!TryEnterCriticalSection(cr)) while(!TryEnterCriticalSection(cr))
GuiProcessEvents(); GuiProcessEvents();