From: Carl Hetherington Date: Thu, 12 Jan 2023 23:59:40 +0000 (+0100) Subject: Better logging in macOS unmount code. X-Git-Tag: v2.16.42~10 X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=d2ba89cff99a379ad18ed4d5b405ccec7f10edfe Better logging in macOS unmount code. --- diff --git a/src/lib/cross_osx.cc b/src/lib/cross_osx.cc index c54dd99f3..3b04f1011 100644 --- a/src/lib/cross_osx.cc +++ b/src/lib/cross_osx.cc @@ -405,16 +405,23 @@ config_path (optional version) } +struct UnmountState +{ + bool success = false; + bool callback = false; +}; + + void done_callback(DADiskRef, DADissenterRef dissenter, void* context) { LOG_DISK_NC("Unmount finished"); - bool* success = reinterpret_cast (context); + auto state = reinterpret_cast(context); + state->callback = true; if (dissenter) { LOG_DISK("Error: %1", DADissenterGetStatus(dissenter)); - *success = false; } else { LOG_DISK_NC("Successful"); - *success = true; + state->success = true; } } @@ -434,19 +441,22 @@ Drive::unmount () return false; } LOG_DISK("Requesting unmount of %1 from %2", _device, thread_id()); - bool success = false; - DADiskUnmount(disk, kDADiskUnmountOptionWhole, &done_callback, &success); + UnmountState state; + DADiskUnmount(disk, kDADiskUnmountOptionWhole, &done_callback, &state); CFRelease (disk); CFRunLoopRef run_loop = CFRunLoopGetCurrent (); DASessionScheduleWithRunLoop (session, run_loop, kCFRunLoopDefaultMode); CFRunLoopStop (run_loop); - CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.5, 0); CFRunLoopRunInMode(kCFRunLoopDefaultMode, 5, 0); CFRelease(session); - LOG_DISK_NC("End of unmount"); - return success; + if (!state.callback) { + LOG_DISK_NC("End of unmount: timeout"); + } else { + LOG_DISK("End of unmount: %1", state.success ? "success" : "failure"); + } + return state.success; }