Skip to content
This repository was archived by the owner on Jan 5, 2024. It is now read-only.

Commit b995b9a

Browse files
committed
Use mutex instead of pseudo-mutex for network bitmaps locks
1 parent a2b1c17 commit b995b9a

File tree

4 files changed

+6
-17
lines changed

4 files changed

+6
-17
lines changed

Managers/FrameMan.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ namespace RTE {
8181
m_FlashScreenColor[screenCount] = -1;
8282
m_FlashedLastFrame[screenCount] = false;
8383
m_FlashTimer[screenCount].Reset();
84-
m_NetworkBitmapIsLocked[screenCount] = false;
8584

8685
for (short bufferFrame = 0; bufferFrame < 2; bufferFrame++) {
8786
m_NetworkBackBufferIntermediate8[bufferFrame][screenCount] = 0;
@@ -862,13 +861,14 @@ namespace RTE {
862861

863862
// Replace 8 bit backbuffer contents with network received image before post-processing as it is where this buffer is copied to 32 bit buffer
864863
if (GetDrawNetworkBackBuffer()) {
865-
m_NetworkBitmapIsLocked[0] = true;
864+
m_NetworkBitmapIsLocked[0].lock();
865+
866866
blit(m_NetworkBackBufferFinal8[m_NetworkFrameReady][0], m_BackBuffer8, 0, 0, 0, 0, m_BackBuffer8->w, m_BackBuffer8->h);
867867
masked_blit(m_NetworkBackBufferFinalGUI8[m_NetworkFrameReady][0], m_BackBuffer8, 0, 0, 0, 0, m_BackBuffer8->w, m_BackBuffer8->h);
868868

869869
if (g_UInputMan.FlagAltState() || g_UInputMan.FlagCtrlState() || g_UInputMan.FlagShiftState()) { g_PerformanceMan.DrawCurrentPing(); }
870870

871-
m_NetworkBitmapIsLocked[0] = false;
871+
m_NetworkBitmapIsLocked[0].unlock();
872872
}
873873
}
874874

@@ -1019,10 +1019,10 @@ namespace RTE {
10191019
dx = (i == 1 || i == 3) ? dw : dx;
10201020
dy = (i == 2 || i == 3) ? dh : dy;
10211021

1022-
m_NetworkBitmapIsLocked[i] = true;
1022+
m_NetworkBitmapIsLocked[i].lock();
10231023
blit(m_NetworkBackBufferIntermediate8[m_NetworkFrameCurrent][i], m_NetworkBackBufferFinal8[m_NetworkFrameCurrent][i], 0, 0, 0, 0, m_NetworkBackBufferFinal8[m_NetworkFrameCurrent][i]->w, m_NetworkBackBufferFinal8[m_NetworkFrameCurrent][i]->h);
10241024
blit(m_NetworkBackBufferIntermediateGUI8[m_NetworkFrameCurrent][i], m_NetworkBackBufferFinalGUI8[m_NetworkFrameCurrent][i], 0, 0, 0, 0, m_NetworkBackBufferFinalGUI8[m_NetworkFrameCurrent][i]->w, m_NetworkBackBufferFinalGUI8[m_NetworkFrameCurrent][i]->h);
1025-
m_NetworkBitmapIsLocked[i] = false;
1025+
m_NetworkBitmapIsLocked[i].unlock();
10261026

10271027
#if defined DEBUG_BUILD || defined MIN_DEBUG_BUILD
10281028
// Draw all player's screen into one

Managers/FrameMan.h

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -445,13 +445,6 @@ namespace RTE {
445445
/// <returns>A pointer to the 8bpp intermediate GUI BITMAP. OWNERSHIP IS NOT TRANSFERRED!</returns>
446446
BITMAP * GetNetworkBackBufferIntermediateGUI8Current(short player) const { return m_NetworkBackBufferIntermediateGUI8[m_NetworkFrameCurrent][player]; }
447447

448-
/// <summary>
449-
/// Gets whether the network backbuffers are locked to be updated.
450-
/// </summary>
451-
/// <param name="player">Which player screen to check for.</param>
452-
/// <returns>Whether the network backbuffers are locked to be updated.</returns>
453-
bool IsNetworkBitmapLocked(short player) const { return m_NetworkBitmapIsLocked[player]; }
454-
455448
// TODO: Figure out.
456449
/// <summary>
457450
///
@@ -623,9 +616,7 @@ namespace RTE {
623616
unsigned short m_NetworkFrameCurrent; //!< Which frame index is being rendered, 0 or 1.
624617
unsigned short m_NetworkFrameReady; //!< Which frame is rendered and ready for transmission, 0 or 1.
625618

626-
bool m_NetworkBitmapIsLocked[c_MaxScreenCount]; //!< If true then the network bitmap is being updated (Pseudo mutex lock/unlock).
627-
// TODO: Test if this destroys the whole multiplayer and use instead of the one above if it doesn't.
628-
//std::mutex m_NetworkBitmapIsLocked[c_MaxScreenCount];
619+
std::mutex m_NetworkBitmapIsLocked[c_MaxScreenCount]; //!< Mutex lock for thread safe updating of the network backbuffer bitmaps.
629620

630621
private:
631622

Managers/NetworkClient.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -778,7 +778,6 @@ namespace RTE
778778

779779
void NetworkClient::DrawFrame()
780780
{
781-
while (g_FrameMan.IsNetworkBitmapLocked(0));
782781
BITMAP * src_bmp = g_FrameMan.GetNetworkBackBufferIntermediate8Ready(0);
783782
BITMAP * dst_bmp = g_FrameMan.GetNetworkBackBuffer8Ready(0);
784783

Managers/NetworkServer.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1435,7 +1435,6 @@ namespace RTE
14351435

14361436
// Wait till frameman releases bitmap
14371437
SetThreadExitReason(player, NetworkServer::LOCKED);
1438-
//while (g_FrameMan.IsNetworkBitmapLocked(player));
14391438
SetThreadExitReason(player, NetworkServer::NORMAL);
14401439

14411440
// Get backbuffer bitmap for this player

0 commit comments

Comments
 (0)