Skip to content

Commit

Permalink
osx: add schedule_io_loop()
Browse files Browse the repository at this point in the history
  • Loading branch information
LDVG authored and kongeo committed Jan 3, 2024
1 parent ec883be commit 4c1e33e
Showing 1 changed file with 17 additions and 11 deletions.
28 changes: 17 additions & 11 deletions src/hid_osx.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2019-2022 Yubico AB. All rights reserved.
* Copyright (c) 2019-2023 Yubico AB. All rights reserved.
* Use of this source code is governed by a BSD-style
* license that can be found in the LICENSE file.
* SPDX-License-Identifier: BSD-2-Clause
Expand Down Expand Up @@ -523,6 +523,21 @@ fido_hid_set_sigmask(void *handle, const fido_sigset_t *sigmask)
return (FIDO_ERR_INTERNAL);
}

static void
schedule_io_loop(struct hid_osx *ctx, int ms)
{
IOHIDDeviceScheduleWithRunLoop(ctx->ref, CFRunLoopGetCurrent(),
ctx->loop_id);

if (ms == -1)
ms = 5000; /* wait 5 seconds by default */

CFRunLoopRunInMode(ctx->loop_id, (double)ms/1000.0, true);

IOHIDDeviceUnscheduleFromRunLoop(ctx->ref, CFRunLoopGetCurrent(),
ctx->loop_id);
}

int
fido_hid_read(void *handle, unsigned char *buf, size_t len, int ms)
{
Expand All @@ -537,16 +552,7 @@ fido_hid_read(void *handle, unsigned char *buf, size_t len, int ms)
return (-1);
}

IOHIDDeviceScheduleWithRunLoop(ctx->ref, CFRunLoopGetCurrent(),
ctx->loop_id);

if (ms == -1)
ms = 5000; /* wait 5 seconds by default */

CFRunLoopRunInMode(ctx->loop_id, (double)ms/1000.0, true);

IOHIDDeviceUnscheduleFromRunLoop(ctx->ref, CFRunLoopGetCurrent(),
ctx->loop_id);
schedule_io_loop(ctx, ms);

if ((r = read(ctx->report_pipe[0], buf, len)) == -1) {
fido_log_error(errno, "%s: read", __func__);
Expand Down

0 comments on commit 4c1e33e

Please sign in to comment.