[FarGroup/FarManager] master: Clarify synchronisation logic (1a4340d7d)

3 views
Skip to first unread message

farg...@farmanager.com

unread,
Feb 9, 2026, 9:45:58 PMFeb 9
to farco...@googlegroups.com
Repository : https://github.com/FarGroup/FarManager
On branch : master
Link : https://github.com/FarGroup/FarManager/commit/1a4340d7d218edd01cd5bd09b2cfe011711e0125

>---------------------------------------------------------------

commit 1a4340d7d218edd01cd5bd09b2cfe011711e0125
Author: Alex Alabuzhev <alab...@gmail.com>
Date: Tue Feb 10 02:39:07 2026 +0000

Clarify synchronisation logic


>---------------------------------------------------------------

1a4340d7d218edd01cd5bd09b2cfe011711e0125
far/changelog | 5 +++++
far/platform.cpp | 29 +++++++++++++++++++----------
far/vbuild.m4 | 2 +-
3 files changed, 25 insertions(+), 11 deletions(-)

diff --git a/far/changelog b/far/changelog
index 8bd2dae89..9d6e028b4 100644
--- a/far/changelog
+++ b/far/changelog
@@ -1,3 +1,8 @@
+--------------------------------------------------------------------------------
+drkns 2026-02-10 02:33:01+00:00 - build 6644
+
+1. Clarify synchronisation logic.
+
--------------------------------------------------------------------------------
drkns 2026-02-07 19:42:24+00:00 - build 6643

diff --git a/far/platform.cpp b/far/platform.cpp
index 6e0459454..fb76e35b9 100644
--- a/far/platform.cpp
+++ b/far/platform.cpp
@@ -122,15 +122,20 @@ namespace os
{
switch (const auto Result = WaitForSingleObject(Handle, Timeout? *Timeout / 1ms : INFINITE))
{
+ case WAIT_ABANDONED:
+ LOGWARNING(L"WaitForSingleObject(): WAIT_ABANDONED for handle {}"sv, Handle);
+ [[fallthrough]];
case WAIT_OBJECT_0:
return true;

case WAIT_TIMEOUT:
return false;

+ case WAIT_FAILED:
+ throw far_fatal_exception(far::format(L"WaitForSingleobject failed: {}"sv, last_error()));
+
default:
- // Abandoned or error
- throw far_fatal_exception(far::format(L"WaitForSingleobject returned {}"sv, Result));
+ std::unreachable();
}
}

@@ -143,18 +148,22 @@ namespace os
const auto Result = WaitForMultipleObjects(static_cast<DWORD>(Handles.size()), Handles.data(), WaitAll, Timeout? *Timeout / 1ms : INFINITE);

if (in_closed_range<size_t>(WAIT_OBJECT_0, Result, WAIT_OBJECT_0 + Handles.size() - 1))
- {
return Result - WAIT_OBJECT_0;
- }
- else if (Result == WAIT_TIMEOUT)
- {
+
+ if (Result == WAIT_TIMEOUT)
return {};
- }
- else
+
+ if (in_closed_range<size_t>(WAIT_ABANDONED, Result, WAIT_ABANDONED + Handles.size() - 1))
{
- // Abandoned or error
- throw far_fatal_exception(far::format(L"WaitForMultipleObjects returned {}"sv, Result));
+ const auto HandleIndex = Result - WAIT_ABANDONED;
+ LOGWARNING(L"WaitForMultipleObjects(): WAIT_ABANDONED for handle {} ({}/{})"sv, Handles[HandleIndex], HandleIndex, Handles.size());
+ return HandleIndex;
}
+
+ if (Result == WAIT_FAILED)
+ throw far_fatal_exception(far::format(L"WaitForMultipleObjects failed: {}"sv, last_error()));
+
+ std::unreachable();
}

void handle_implementation::wait(HANDLE const Handle)
diff --git a/far/vbuild.m4 b/far/vbuild.m4
index 9e97342c5..c458223ef 100644
--- a/far/vbuild.m4
+++ b/far/vbuild.m4
@@ -1 +1 @@
-6643
+6644


Reply all
Reply to author
Forward
0 new messages