Skip to content

Commit 8b40c3a

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 2650f31 commit 8b40c3a

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
@@ -93,8 +93,10 @@ class OpenEvents
9393

9494
HANDLE getEvent(SLONG pid, SLONG signal_number)
9595
{
96+
Firebird::MutexLockGuard guard(m_mutex, FB_FUNCTION);
97+
9698
Item* oldestEvent = NULL;
97-
ULONG oldestAge = ~0;
99+
FB_UINT64 oldestAge = ~(0ULL);
98100

99101
Item* evnt = m_events;
100102
const Item* const end = evnt + m_count;
@@ -134,18 +136,18 @@ class OpenEvents
134136
}
135137

136138
private:
137-
class Item
139+
struct Item
138140
{
139-
public:
140141
SLONG pid;
141142
SLONG signal; // pseudo-signal number
142143
HANDLE handle; // local handle to foreign event
143-
ULONG age;
144+
FB_UINT64 age;
144145
};
145146

146147
Item m_events[MAX_OPN_EVENTS];
147148
int m_count;
148-
ULONG m_clock;
149+
FB_UINT64 m_clock;
150+
Firebird::Mutex m_mutex;
149151
};
150152

151153
} // namespace

0 commit comments

Comments
 (0)