@@ -52,44 +52,6 @@ PRAGMA_ENABLE_UNDEFINED_IDENTIFIER_WARNINGS
5252namespace PUERTS_NAMESPACE
5353{
5454
55- class V8WebSocketClientImpl ;
56-
57- namespace
58- {
59- std::mutex GWSDeleteMutex;
60- std::condition_variable GWSDeleteCV;
61- std::queue<V8WebSocketClientImpl*> GWSDeleteQueue;
62- std::once_flag GWSDeleteThreadOnce;
63-
64- void WebSocketDeleteThreadFunc ()
65- {
66- for (;;)
67- {
68- V8WebSocketClientImpl* client = nullptr ;
69- {
70- std::unique_lock<std::mutex> lock (GWSDeleteMutex);
71- GWSDeleteCV.wait (lock, [] { return !GWSDeleteQueue.empty (); });
72-
73- client = GWSDeleteQueue.front ();
74- GWSDeleteQueue.pop ();
75- }
76-
77- delete client;
78- }
79- }
80-
81- void EnqueueWebSocketForDelete (V8WebSocketClientImpl* client)
82- {
83- std::call_once (GWSDeleteThreadOnce, [] { std::thread (WebSocketDeleteThreadFunc).detach (); });
84-
85- {
86- std::lock_guard<std::mutex> lock (GWSDeleteMutex);
87- GWSDeleteQueue.push (client);
88- }
89- GWSDeleteCV.notify_one ();
90- }
91- } // anonymous namespace
92-
9355#if !defined(USING_IN_UNREAL_ENGINE)
9456class DataTransfer
9557{
@@ -169,6 +131,8 @@ class V8WebSocketClientImpl
169131
170132 void Cleanup ();
171133
134+ static void OnGarbageCollectedWithFree (const v8::WeakCallbackInfo<V8WebSocketClientImpl>& Data);
135+
172136private:
173137 v8::Isolate* Isolate;
174138
@@ -185,7 +149,43 @@ class V8WebSocketClientImpl
185149 v8::Global<v8::Function> Handles[HANDLE_TYPE_END];
186150};
187151
188- static void OnGarbageCollectedWithFree (const v8::WeakCallbackInfo<V8WebSocketClientImpl>& Data)
152+ namespace
153+ {
154+ std::mutex GWSDeleteMutex;
155+ std::condition_variable GWSDeleteCV;
156+ std::queue<V8WebSocketClientImpl*> GWSDeleteQueue;
157+ std::once_flag GWSDeleteThreadOnce;
158+
159+ void WebSocketDeleteThreadFunc ()
160+ {
161+ for (;;)
162+ {
163+ V8WebSocketClientImpl* client = nullptr ;
164+ {
165+ std::unique_lock<std::mutex> lock (GWSDeleteMutex);
166+ GWSDeleteCV.wait (lock, [] { return !GWSDeleteQueue.empty (); });
167+
168+ client = GWSDeleteQueue.front ();
169+ GWSDeleteQueue.pop ();
170+ }
171+
172+ delete client;
173+ }
174+ }
175+
176+ void EnqueueWebSocketForDelete (V8WebSocketClientImpl* client)
177+ {
178+ std::call_once (GWSDeleteThreadOnce, [] { std::thread (WebSocketDeleteThreadFunc).detach (); });
179+
180+ {
181+ std::lock_guard<std::mutex> lock (GWSDeleteMutex);
182+ GWSDeleteQueue.push (client);
183+ }
184+ GWSDeleteCV.notify_one ();
185+ }
186+ } // anonymous namespace
187+
188+ void V8WebSocketClientImpl::OnGarbageCollectedWithFree (const v8::WeakCallbackInfo<V8WebSocketClientImpl>& Data)
189189{
190190 auto client = Data.GetParameter ();
191191 client->CloseImmediately (websocketpp::close::status::normal, " " );
0 commit comments