Skip to content

Commit b8f53bd

Browse files
committed
Replace string locks with atomic Interlocked operations
Fix VC6 build errors using InterlockedExchange casts
1 parent 45bde0e commit b8f53bd

4 files changed

Lines changed: 8 additions & 8 deletions

File tree

Core/GameEngine/Include/Common/AsciiString.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class AsciiString
8787
#if defined(RTS_DEBUG)
8888
const char* m_debugptr; // just makes it easier to read in the debugger
8989
#endif
90-
volatile long m_refCount; // reference count
90+
long m_refCount; // reference count
9191
unsigned short m_numCharsAllocated; // length of data allocated
9292
// char m_stringdata[];
9393

Core/GameEngine/Include/Common/UnicodeString.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class UnicodeString
8787
#if defined(RTS_DEBUG)
8888
const WideChar* m_debugptr; // just makes it easier to read in the debugger
8989
#endif
90-
volatile long m_refCount; // reference count
90+
long m_refCount; // reference count
9191
unsigned short m_numCharsAllocated; // length of data allocated
9292
// WideChar m_stringdata[];
9393

Core/GameEngine/Source/Common/System/AsciiString.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ void AsciiString::ensureUniqueBufferOfSize(int numCharsNeeded, Bool preserveData
168168
if (strToCat)
169169
strcat(newData->peek(), strToCat);
170170

171-
AsciiStringData* oldData = (AsciiStringData*)InterlockedExchangePointer((PVOID*)&m_data, newData);
171+
AsciiStringData* oldData = (AsciiStringData*)InterlockedExchange((LONG*)&m_data, (LONG)newData);
172172
if (oldData)
173173
{
174174
if (InterlockedDecrement(&oldData->m_refCount) == 0)
@@ -185,7 +185,7 @@ void AsciiString::ensureUniqueBufferOfSize(int numCharsNeeded, Bool preserveData
185185
void AsciiString::releaseBuffer()
186186
{
187187
validate();
188-
AsciiStringData* data = (AsciiStringData*)InterlockedExchangePointer((PVOID*)&m_data, nullptr);
188+
AsciiStringData* data = (AsciiStringData*)InterlockedExchange((LONG*)&m_data, (LONG)nullptr);
189189
if (data)
190190
{
191191
if (InterlockedDecrement(&data->m_refCount) == 0)
@@ -229,7 +229,7 @@ void AsciiString::set(const AsciiString& stringSrc)
229229
InterlockedIncrement(&newData->m_refCount);
230230
}
231231

232-
AsciiStringData* oldData = (AsciiStringData*)InterlockedExchangePointer((PVOID*)&m_data, newData);
232+
AsciiStringData* oldData = (AsciiStringData*)InterlockedExchange((LONG*)&m_data, (LONG)newData);
233233
if (oldData)
234234
{
235235
if (InterlockedDecrement(&oldData->m_refCount) == 0)

Core/GameEngine/Source/Common/System/UnicodeString.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ void UnicodeString::ensureUniqueBufferOfSize(int numCharsNeeded, Bool preserveDa
119119
if (strToCat)
120120
wcscat(newData->peek(), strToCat);
121121

122-
UnicodeStringData* oldData = (UnicodeStringData*)InterlockedExchangePointer((PVOID*)&m_data, newData);
122+
UnicodeStringData* oldData = (UnicodeStringData*)InterlockedExchange((LONG*)&m_data, (LONG)newData);
123123
if (oldData)
124124
{
125125
if (InterlockedDecrement(&oldData->m_refCount) == 0)
@@ -136,7 +136,7 @@ void UnicodeString::ensureUniqueBufferOfSize(int numCharsNeeded, Bool preserveDa
136136
void UnicodeString::releaseBuffer()
137137
{
138138
validate();
139-
UnicodeStringData* data = (UnicodeStringData*)InterlockedExchangePointer((PVOID*)&m_data, nullptr);
139+
UnicodeStringData* data = (UnicodeStringData*)InterlockedExchange((LONG*)&m_data, (LONG)nullptr);
140140
if (data)
141141
{
142142
if (InterlockedDecrement(&data->m_refCount) == 0)
@@ -179,7 +179,7 @@ void UnicodeString::set(const UnicodeString& stringSrc)
179179
InterlockedIncrement(&newData->m_refCount);
180180
}
181181

182-
UnicodeStringData* oldData = (UnicodeStringData*)InterlockedExchangePointer((PVOID*)&m_data, newData);
182+
UnicodeStringData* oldData = (UnicodeStringData*)InterlockedExchange((LONG*)&m_data, (LONG)newData);
183183
if (oldData)
184184
{
185185
if (InterlockedDecrement(&oldData->m_refCount) == 0)

0 commit comments

Comments
 (0)