Skip to content

Commit b7a1a50

Browse files
committed
Fix crash that would occur when servers were deleted.
1 parent c09fc79 commit b7a1a50

File tree

2 files changed

+13
-11
lines changed

2 files changed

+13
-11
lines changed

Sources/CgRPC/shim/server.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,14 @@ void cgrpc_server_destroy(cgrpc_server *server) {
6565
grpc_server_shutdown_and_notify(server->server,
6666
server->completion_queue,
6767
cgrpc_create_tag(1000));
68-
grpc_event completion_event =
69-
grpc_completion_queue_pluck(server->completion_queue,
70-
cgrpc_create_tag(1000),
71-
cgrpc_deadline_in_seconds_from_now(5),
72-
NULL);
73-
assert(completion_event.type == GRPC_OP_COMPLETE);
68+
while (1) {
69+
double timeout = 5;
70+
gpr_timespec deadline = cgrpc_deadline_in_seconds_from_now(timeout);
71+
grpc_event completion_event = grpc_completion_queue_next(server->completion_queue, deadline, NULL);
72+
if (completion_event.type == GRPC_OP_COMPLETE) {
73+
break;
74+
}
75+
}
7476
grpc_server_destroy(server->server);
7577
server->server = NULL;
7678

Tests/gRPCTests/GRPCTests.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,19 @@
2222
FileHandle.standardError.write((message + "\n").data(using:.utf8)!)
2323
}
2424

25+
26+
2527
class gRPCTests: XCTestCase {
2628

2729
func testBasicSanity() {
2830
gRPC.initialize()
29-
31+
let server = gRPC.Server(address:address)
3032
let sem = DispatchSemaphore(value: 0)
3133

3234
// start the server
3335
DispatchQueue.global().async() {
3436
do {
35-
try runServer()
37+
try runServer(server:server)
3638
} catch (let error) {
3739
XCTFail("server error \(error)")
3840
}
@@ -83,8 +85,6 @@
8385
let statusCode = 0
8486
let statusMessage = "OK"
8587

86-
let server = gRPC.Server(address:address)
87-
8888
func verify_metadata(_ metadata: Metadata, expected: [String:String]) {
8989
XCTAssertGreaterThanOrEqual(metadata.count(), expected.count)
9090
for i in 0..<metadata.count() {
@@ -127,7 +127,7 @@
127127
}
128128
}
129129

130-
func runServer() throws {
130+
func runServer(server: gRPC.Server) throws {
131131
var requestCount = 0
132132
let sem = DispatchSemaphore(value: 0)
133133
server.run() {(requestHandler) in

0 commit comments

Comments
 (0)