Skip to content

Commit

Permalink
Merge pull request #2420 from Montellese/rssmanager_locks
Browse files Browse the repository at this point in the history
fix possible access violation in CRssManager::Clear() during shutdown
  • Loading branch information
Montellese committed Mar 15, 2013
2 parents 3d13a60 + a9cf850 commit 482797f
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 4 deletions.
4 changes: 1 addition & 3 deletions xbmc/settings/Settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -141,9 +141,7 @@ void CSettings::Initialize()
}

CSettings::~CSettings(void)
{
Clear();
}
{ }


void CSettings::Save() const
Expand Down
6 changes: 5 additions & 1 deletion xbmc/utils/RssManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#include "RssManager.h"
#include "filesystem/File.h"
#include "settings/Settings.h"
#include "threads/SingleLock.h"
#include "utils/log.h"
#include "utils/RssReader.h"
#include "utils/StringUtils.h"
Expand All @@ -36,7 +37,6 @@ CRssManager::CRssManager()
CRssManager::~CRssManager()
{
Stop();
Clear();
}

CRssManager& CRssManager::Get()
Expand All @@ -52,6 +52,7 @@ void CRssManager::Start()

void CRssManager::Stop()
{
CSingleLock lock(m_critical);
m_bActive = false;
for (unsigned int i = 0; i < m_readers.size(); i++)
{
Expand All @@ -63,6 +64,7 @@ void CRssManager::Stop()

bool CRssManager::Load()
{
CSingleLock lock(m_critical);
string rssXML = g_settings.GetUserDataItem("RssFeeds.xml");
if (!CFile::Exists(rssXML))
return false;
Expand Down Expand Up @@ -134,12 +136,14 @@ bool CRssManager::Reload()

void CRssManager::Clear()
{
CSingleLock lock(m_critical);
m_mapRssUrls.clear();
}

// returns true if the reader doesn't need creating, false otherwise
bool CRssManager::GetReader(int controlID, int windowID, IRssObserver* observer, CRssReader *&reader)
{
CSingleLock lock(m_critical);
// check to see if we've already created this reader
for (unsigned int i = 0; i < m_readers.size(); i++)
{
Expand Down
3 changes: 3 additions & 0 deletions xbmc/utils/RssManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
#include <vector>
#include <string>

#include "threads/CriticalSection.h"

class CRssReader;
class IRssObserver;

Expand Down Expand Up @@ -66,4 +68,5 @@ class CRssManager
std::vector<READERCONTROL> m_readers;
RssUrls m_mapRssUrls;
bool m_bActive;
CCriticalSection m_critical;
};

0 comments on commit 482797f

Please sign in to comment.