Skip to content

Commit 09052c5

Browse files
committed
[SourceKit] Fix an xpc_object leak
Make sure we release the `event` for cancellation requests. This also ensures the `xpc_transaction` for the request is ended.
1 parent 26df3a3 commit 09052c5

File tree

1 file changed

+3
-0
lines changed

1 file changed

+3
-0
lines changed

tools/SourceKit/tools/sourcekitd/bin/XPC/Service/XPCService.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,13 +308,16 @@ static void sourcekitdServer_peer_event_handler(xpc_connection_t peer,
308308
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), ^{
309309
sourcekitd::cancelRequest(/*CancellationToken=*/cancelToken);
310310
});
311+
xpc_release(event);
311312
} else if (SourceKitCancellationToken cancelToken =
312313
reinterpret_cast<SourceKitCancellationToken>(
313314
xpc_dictionary_get_uint64(
314315
event, xpc::KeyDisposeRequestHandle))) {
315316
sourcekitd::disposeCancellationToken(/*CancellationToken=*/cancelToken);
317+
xpc_release(event);
316318
} else {
317319
assert(false && "unexpected message");
320+
xpc_release(event);
318321
}
319322
});
320323
}

0 commit comments

Comments
 (0)