File tree Expand file tree Collapse file tree 6 files changed +51
-16
lines changed Expand file tree Collapse file tree 6 files changed +51
-16
lines changed Original file line number Diff line number Diff line change @@ -18,5 +18,6 @@ limitations under the License.
18
18
19
19
namespace Dive
20
20
{
21
- int server_main ();
22
- }
21
+ void StopServer ();
22
+ int server_main ();
23
+ } // namespace Dive
Original file line number Diff line number Diff line change @@ -132,6 +132,22 @@ grpc::Status DiveServiceImpl::DownloadFile(grpc::ServerContext *cont
132
132
return grpc::Status::OK;
133
133
}
134
134
135
+ std::unique_ptr<grpc::Server> &GetServer ()
136
+ {
137
+ static std::unique_ptr<grpc::Server> server = nullptr ;
138
+ return server;
139
+ }
140
+
141
+ void StopServer ()
142
+ {
143
+ auto &server = GetServer ();
144
+ if (server)
145
+ {
146
+ LOGI (" StopServer at service.cc" );
147
+ server->Shutdown ();
148
+ }
149
+ }
150
+
135
151
void RunServer (uint16_t port)
136
152
{
137
153
std::string server_address = absl::StrFormat (" 0.0.0.0:%d" , port);
@@ -142,7 +158,8 @@ void RunServer(uint16_t port)
142
158
builder.AddListeningPort (server_address, grpc::InsecureServerCredentials ());
143
159
144
160
builder.RegisterService (&service);
145
- std::unique_ptr<grpc::Server> server (builder.BuildAndStart ());
161
+ auto &server = GetServer ();
162
+ server = builder.BuildAndStart ();
146
163
LOGI (" Server listening on %s" , server_address.c_str ());
147
164
server->Wait ();
148
165
}
Original file line number Diff line number Diff line change @@ -77,4 +77,20 @@ ServerRunner &GetServerRunner()
77
77
return runner;
78
78
}
79
79
80
+ Server::Server ()
81
+ {
82
+ server_thread = std::thread (Dive::server_main);
83
+ }
84
+
85
+ void Server::StopServer ()
86
+ {
87
+ Dive::StopServer ();
88
+ if (server_thread.joinable ())
89
+ {
90
+ server_thread.join ();
91
+ }
92
+ }
93
+
94
+ Server server;
95
+
80
96
} // namespace DiveLayer
Original file line number Diff line number Diff line change @@ -42,4 +42,13 @@ class ServerRunner
42
42
43
43
ServerRunner &GetServerRunner ();
44
44
45
+ struct Server
46
+ {
47
+ std::thread server_thread;
48
+ Server ();
49
+ void StopServer ();
50
+ };
51
+
52
+ extern Server server;
53
+
45
54
} // namespace DiveLayer
Original file line number Diff line number Diff line change @@ -56,12 +56,6 @@ struct XrSessionData
56
56
{
57
57
XrSession session;
58
58
XrGeneratedDispatchTable dispatch_table;
59
- ServerRunner &server;
60
-
61
- XrSessionData () :
62
- server (GetServerRunner())
63
- {
64
- }
65
59
};
66
60
67
61
static thread_local XrInstanceData *last_used_xr_instance_data = nullptr ;
@@ -190,7 +184,7 @@ XRAPI_ATTR XrResult XRAPI_CALL ApiDiveLayerXrDestroyInstance(XrInstance instance
190
184
191
185
LOGD (" ApiDiveLayerXrDestroyInstance\n " );
192
186
XrResult result = XR_SUCCESS;
193
-
187
+ server. StopServer ();
194
188
auto sess_data = GetXrInstanceLayerData (DataKey (instance));
195
189
if (sess_data)
196
190
{
Original file line number Diff line number Diff line change @@ -43,12 +43,6 @@ struct InstanceData
43
43
{
44
44
VkInstance instance;
45
45
InstanceDispatchTable dispatch_table;
46
- ServerRunner &server;
47
-
48
- InstanceData () :
49
- server (GetServerRunner())
50
- {
51
- }
52
46
};
53
47
54
48
struct DeviceData
@@ -515,6 +509,10 @@ extern "C"
515
509
return (PFN_vkVoidFunction)&DiveInterceptEnumerateInstanceExtensionProperties;
516
510
if (0 == strcmp (func, " vkCreateInstance" ))
517
511
return (PFN_vkVoidFunction)&DiveInterceptCreateInstance;
512
+ if (0 == strcmp (func, " vkDestroyInstance" ))
513
+ {
514
+ LOGI (" vkDestroyInstance" );
515
+ }
518
516
if (inst == VK_NULL_HANDLE)
519
517
return NULL ;
520
518
You can’t perform that action at this time.
0 commit comments