[FarGroup/FarManager] master: gh-1022: crash on smb share (a8aab6fb0)

0 views
Skip to first unread message

farg...@farmanager.com

unread,
Oct 3, 2025, 4:00:52 PMOct 3
to farco...@googlegroups.com
Repository : https://github.com/FarGroup/FarManager
On branch : master
Link : https://github.com/FarGroup/FarManager/commit/a8aab6fb03914eb46325db5612a11674e4aa9516

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

commit a8aab6fb03914eb46325db5612a11674e4aa9516
Author: Alex Alabuzhev <alab...@gmail.com>
Date: Fri Oct 3 20:49:43 2025 +0100

gh-1022: crash on smb share

This was already fixed in 1805 and broken again in 5838


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

a8aab6fb03914eb46325db5612a11674e4aa9516
far/changelog | 6 ++++++
far/keyboard.cpp | 2 ++
far/notification.cpp | 13 +++++++++++++
far/notification.hpp | 9 +++++++++
far/platform.version.cpp | 2 +-
far/vbuild.m4 | 2 +-
6 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/far/changelog b/far/changelog
index 11f75e0cd..c09cc3867 100644
--- a/far/changelog
+++ b/far/changelog
@@ -1,3 +1,9 @@
+--------------------------------------------------------------------------------
+drkns 2025-10-03 20:47:49+01:00 - build 6568
+
+1. gh-1022: crash on smb share.
+ This was already fixed in 1805 and broken again in 5838.
+
--------------------------------------------------------------------------------
drkns 2025-10-03 11:10:57+01:00 - build 6567

diff --git a/far/keyboard.cpp b/far/keyboard.cpp
index cf20ffce1..e12eff4e3 100644
--- a/far/keyboard.cpp
+++ b/far/keyboard.cpp
@@ -1280,6 +1280,8 @@ bool CheckForEscSilent()
return true;
}

+ SCOPED_ACTION(auto)(message_manager::instance().suppressor());
+
INPUT_RECORD rec;
bool Processed = true;
/* TODO: Здесь, в общем то - ХЗ, т.к.
diff --git a/far/notification.cpp b/far/notification.cpp
index cdd86a180..84da27941 100644
--- a/far/notification.cpp
+++ b/far/notification.cpp
@@ -91,6 +91,16 @@ void message_manager::commit_remove()
});
}

+void message_manager::suppress_dispatch()
+{
+ ++m_SuppressDispatch;
+}
+
+void message_manager::restore_dispatch()
+{
+ --m_SuppressDispatch;
+}
+
message_manager::handlers_map::iterator message_manager::subscribe(UUID const& EventId, const detail::event_handler& EventHandler)
{
SCOPED_ACTION(std::scoped_lock)(m_PendingLock);
@@ -155,6 +165,9 @@ void message_manager::notify(string_view const EventId, std::any&& Payload)

bool message_manager::dispatch()
{
+ if (m_SuppressDispatch)
+ return false;
+
bool Result = false;

if (!m_DispatchInProgress)
diff --git a/far/notification.hpp b/far/notification.hpp
index e0de61add..9892788aa 100644
--- a/far/notification.hpp
+++ b/far/notification.hpp
@@ -41,6 +41,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Common:
#include "common/preprocessor.hpp"
#include "common/singleton.hpp"
+#include "common/smart_ptr.hpp"
#include "common/string_utils.hpp"

// External:
@@ -114,6 +115,10 @@ public:
void enable_power_notifications();
void disable_power_notifications();

+ [[nodiscard]]
+ auto suppressor() { return make_raii_wrapper<&message_manager::suppress_dispatch, &message_manager::restore_dispatch>(this); }
+
+
private:
struct message
{
@@ -129,6 +134,9 @@ private:
void commit_add();
void commit_remove();

+ void suppress_dispatch();
+ void restore_dispatch();
+
os::concurrency::critical_section
m_QueueLock,
m_PendingLock,
@@ -143,6 +151,7 @@ private:
std::unique_ptr<wm_listener> m_Window;

std::atomic_size_t m_DispatchInProgress{};
+ std::atomic_size_t m_SuppressDispatch{};
};

class listener: noncopyable
diff --git a/far/platform.version.cpp b/far/platform.version.cpp
index b80fd9846..942850e1e 100644
--- a/far/platform.version.cpp
+++ b/far/platform.version.cpp
@@ -300,7 +300,7 @@ WARNING_POP()
const auto CurrentVersion = Key->get_string(L"CurrentVersion"sv);
const auto DisplayVersion = Key->get_string(L"DisplayVersion"sv);
const auto ReleaseId = Key->get_string(L"ReleaseId"sv);
- const auto CurrentBuild = Key->get_string(L"CurrentBuild"sv);
+ const auto CurrentBuild = Key->get_string(L"CurrentBuildNumber"sv);
const auto CSDVersion = Key->get_string(L"CSDVersion"sv);
const auto UBR = Key->get_dword(L"UBR"sv);

diff --git a/far/vbuild.m4 b/far/vbuild.m4
index bde5b49b5..90aefcab8 100644
--- a/far/vbuild.m4
+++ b/far/vbuild.m4
@@ -1 +1 @@
-6567
+6568


Reply all
Reply to author
Forward
0 new messages