[sourcekit] Fix non-deterministic failure in CompileNotifications tests

This is a test-only change except for the introduction of a new request
that is only used by tests.

Our notifications are dispatched in the XPC event handler, which is not
synchronized with replies to explicit XPC send_message_with_reply calls.
This is fine for most users of sourcekitd, since the notifications are
already enqueued on the client side, but for testing we need a way to
guarantee that all notifications are passed to the client-side handler
before we exit. This commit introduces a new request for testing that
triggers a notification, allowing the client to wait on that
notification to ensure all previously posted notifications have been
handled.

Note: the non-deterministic test failures can be triggered by adding a
sleep of ~100 ms in the event handler before the notification is
dispatched to the main queue.

rdar://40311995
This commit is contained in:
Ben Langmuir
2018-06-12 12:37:44 -07:00
parent 197593b4aa
commit a88c73fe60
3 changed files with 42 additions and 5 deletions

View File

@@ -207,6 +207,7 @@ UID_REQUESTS = [
REQUEST('SemanticRefactoring', 'source.request.semantic.refactoring'),
REQUEST('EnableCompileNotifications',
'source.request.enable-compile-notifications'),
REQUEST('TestNotification', 'source.request.test_notification'),
]