Skip to content

Commit 4b36903

Browse files
committed
Make OpenEvents thread-safe, as @asfernandes suggested.
Use 64-bit int for age counter to not worry about possible overflows.
1 parent 254364d commit 4b36903

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

src/common/os/win32/isc_ipc.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,10 @@ class OpenEvents
9292

9393
HANDLE getEvent(SLONG pid, SLONG signal_number)
9494
{
95+
Firebird::MutexLockGuard guard(&m_mutex, FB_FUNCTION);
96+
9597
Item* oldestEvent = NULL;
96-
ULONG oldestAge = ~0;
98+
FB_UINT64 oldestAge = ~(0ULL);
9799

98100
Item* evnt = m_events;
99101
const Item* const end = evnt + m_count;
@@ -133,18 +135,18 @@ class OpenEvents
133135
}
134136

135137
private:
136-
class Item
138+
struct Item
137139
{
138-
public:
139140
SLONG pid;
140141
SLONG signal; // pseudo-signal number
141142
HANDLE handle; // local handle to foreign event
142-
ULONG age;
143+
FB_UINT64 age;
143144
};
144145

145146
Item m_events[MAX_OPN_EVENTS];
146147
int m_count;
147-
ULONG m_clock;
148+
FB_UINT64 m_clock;
149+
Firebird::Mutex m_mutex;
148150
};
149151

150152
} // namespace

0 commit comments

Comments
 (0)