Jelajahi Sumber

Fix crash that would occur when servers were deleted.

Tim Burks 8 tahun lalu
induk
melakukan
b7a1a50f12
2 mengubah file dengan 13 tambahan dan 11 penghapusan
  1. 8 6
      Sources/CgRPC/shim/server.c
  2. 5 5
      Tests/gRPCTests/GRPCTests.swift

+ 8 - 6
Sources/CgRPC/shim/server.c

@@ -65,12 +65,14 @@ void cgrpc_server_destroy(cgrpc_server *server) {
   grpc_server_shutdown_and_notify(server->server,
                                   server->completion_queue,
                                   cgrpc_create_tag(1000));
-  grpc_event completion_event =
-  grpc_completion_queue_pluck(server->completion_queue,
-                              cgrpc_create_tag(1000),
-                              cgrpc_deadline_in_seconds_from_now(5),
-                              NULL);
-  assert(completion_event.type == GRPC_OP_COMPLETE);
+  while (1) {
+    double timeout = 5;
+    gpr_timespec deadline = cgrpc_deadline_in_seconds_from_now(timeout);
+    grpc_event completion_event = grpc_completion_queue_next(server->completion_queue, deadline, NULL);
+    if (completion_event.type == GRPC_OP_COMPLETE) {
+      break;
+    }
+  }
   grpc_server_destroy(server->server);
   server->server = NULL;
 

+ 5 - 5
Tests/gRPCTests/GRPCTests.swift

@@ -22,17 +22,19 @@
   FileHandle.standardError.write((message + "\n").data(using:.utf8)!)
  }
 
+
+
  class gRPCTests: XCTestCase {
 
   func testBasicSanity() {
     gRPC.initialize()
-
+    let server = gRPC.Server(address:address)
     let sem = DispatchSemaphore(value: 0)
 
     // start the server
     DispatchQueue.global().async() {
       do {
-        try runServer()
+        try runServer(server:server)
       } catch (let error) {
         XCTFail("server error \(error)")
       }
@@ -83,8 +85,6 @@
  let statusCode = 0
  let statusMessage = "OK"
 
- let server = gRPC.Server(address:address)
-
  func verify_metadata(_ metadata: Metadata, expected: [String:String]) {
   XCTAssertGreaterThanOrEqual(metadata.count(), expected.count)
   for i in 0..<metadata.count() {
@@ -127,7 +127,7 @@
   }
  }
 
- func runServer() throws {
+ func runServer(server: gRPC.Server) throws {
   var requestCount = 0
   let sem = DispatchSemaphore(value: 0)
   server.run() {(requestHandler) in