Temporary fix for the deadlock.

This commit is contained in:
JoelKatz
2012-10-05 13:05:10 -07:00
parent 0630a4b7f4
commit a9c1b51e82
2 changed files with 9 additions and 9 deletions

View File

@@ -11,7 +11,7 @@
// These must stay at the top of this file
std::map<int, SField::ptr> SField::codeToField;
boost::mutex SField::mapMutex;
boost::recursive_mutex SField::mapMutex;
SField sfInvalid(-1), sfGeneric(0);
SField sfLedgerEntry(STI_LEDGERENTRY, 1, "LedgerEntry");
@@ -34,7 +34,7 @@ SField::ref SField::getField(int code)
if ((type <= 0) || (field <= 0))
return sfInvalid;
boost::mutex::scoped_lock sl(mapMutex);
boost::recursive_mutex::scoped_lock sl(mapMutex);
std::map<int, SField::ptr>::iterator it = codeToField.find(code);
if (it != codeToField.end())
@@ -84,7 +84,7 @@ std::string SField::getName() const
SField::ref SField::getField(const std::string& fieldName)
{ // OPTIMIZEME me with a map. CHECKME this is case sensitive
boost::mutex::scoped_lock sl(mapMutex);
boost::recursive_mutex::scoped_lock sl(mapMutex);
typedef std::pair<const int, SField::ptr> int_sfref_pair;
BOOST_FOREACH(const int_sfref_pair& fieldPair, codeToField)
{
@@ -96,7 +96,7 @@ SField::ref SField::getField(const std::string& fieldName)
SField::~SField()
{
boost::mutex::scoped_lock sl(mapMutex);
boost::recursive_mutex::scoped_lock sl(mapMutex);
std::map<int, ptr>::iterator it = codeToField.find(fieldCode);
if ((it != codeToField.end()) && (it->second == this))
codeToField.erase(it);

View File

@@ -3,7 +3,7 @@
#include <string>
#include <boost/thread/mutex.hpp>
#include <boost/thread/recursive_mutex.hpp>
#define FIELD_CODE(type, index) ((static_cast<int>(type) << 16) | index)
@@ -40,8 +40,8 @@ public:
typedef SField const * ptr;
protected:
static std::map<int, ptr> codeToField;
static boost::mutex mapMutex;
static std::map<int, ptr> codeToField;
static boost::recursive_mutex mapMutex;
public:
@@ -53,14 +53,14 @@ public:
SField(int fc, SerializedTypeID tid, int fv, const char* fn) :
fieldCode(fc), fieldType(tid), fieldValue(fv), fieldName(fn)
{
boost::mutex::scoped_lock sl(mapMutex);
boost::recursive_mutex::scoped_lock sl(mapMutex);
codeToField[fieldCode] = this;
}
SField(SerializedTypeID tid, int fv, const char *fn) :
fieldCode(FIELD_CODE(tid, fv)), fieldType(tid), fieldValue(fv), fieldName(fn)
{
boost::mutex::scoped_lock sl(mapMutex);
boost::recursive_mutex::scoped_lock sl(mapMutex);
codeToField[fieldCode] = this;
}