Call read packets on background queue to allow waiting for signal.

This commit is contained in:
Jeroen Leenarts 2018-08-05 22:59:34 +02:00
parent 09b1cd129c
commit 35cca893f5
1 changed files with 7 additions and 6 deletions

View File

@ -85,12 +85,13 @@ static ssize_t do_read(const void *ctx, const unsigned char *buf, size_t len)
if (wrapper.packets.count == 0) {
[wrapper.packetFlow readPacketsWithCompletionHandler:^(NSArray<NSData *> * _Nonnull packets, NSArray<NSNumber *> * _Nonnull protocols) {
[wrapper.packets addObjectsFromArray:packets];
[wrapper.protocols addObjectsFromArray:protocols];
// TODO make sure that the completion handler and the do_read are not performed on the same thread.
[wrapper.condition signal];
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
[wrapper.packetFlow readPacketsWithCompletionHandler:^(NSArray<NSData *> * _Nonnull packets, NSArray<NSNumber *> * _Nonnull protocols) {
[wrapper.packets addObjectsFromArray:packets];
[wrapper.protocols addObjectsFromArray:protocols];
[wrapper.condition signal];
}];
});
[wrapper.condition wait];
}