From d0aa3103620cdc70a2d1e6e4d95609aabc2e2d25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Lucas=20Golini?= Date: Sun, 30 Aug 2026 22:15:14 -0300 Subject: [PATCH] Fix compilation issues with older C++ versions. --- .../eterm/terminal/terminalcontroller.hpp | 5 ++-- .../src/eterm/terminal/terminalcontroller.cpp | 25 ++++++++++++------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/modules/eterm/include/eterm/terminal/terminalcontroller.hpp b/src/modules/eterm/include/eterm/terminal/terminalcontroller.hpp index 9701da3fb..2f7d1bd57 100644 --- a/src/modules/eterm/include/eterm/terminal/terminalcontroller.hpp +++ b/src/modules/eterm/include/eterm/terminal/terminalcontroller.hpp @@ -222,7 +222,7 @@ class TerminalController final : public std::enable_shared_from_this mCommands; std::mutex mEventMutex; std::deque mEvents; - std::atomic> mPublishedSnapshot; + mutable std::mutex mPublishedSnapshotMutex; + std::shared_ptr mPublishedSnapshot; std::atomic mShutdownRequested{ false }; std::atomic mNextScrollCommand{ 0 }; }; diff --git a/src/modules/eterm/src/eterm/terminal/terminalcontroller.cpp b/src/modules/eterm/src/eterm/terminal/terminalcontroller.cpp index 95a73f0db..616616228 100644 --- a/src/modules/eterm/src/eterm/terminal/terminalcontroller.cpp +++ b/src/modules/eterm/src/eterm/terminal/terminalcontroller.cpp @@ -277,16 +277,18 @@ void TerminalController::shutdown() { mWorker.join(); } -void TerminalController::enqueue( Command&& command ) { - if ( mShutdownRequested.load( std::memory_order_acquire ) ) - return; +bool TerminalController::enqueue( Command&& command ) { { std::lock_guard lock( mCommandMutex ); + if ( mShutdownRequested.load( std::memory_order_relaxed ) ) - return; + return false; + mCommands.emplace_back( std::move( command ) ); } + mCommandCondition.notify_one(); + return true; } void TerminalController::write( std::string data, bool mayEcho ) { @@ -310,10 +312,11 @@ void TerminalController::scrollDown( int amount ) { } Uint64 TerminalController::scrollTo( int position ) { - if ( mShutdownRequested.load( std::memory_order_acquire ) ) - return 0; const Uint64 commandId = mNextScrollCommand.fetch_add( 1, std::memory_order_relaxed ) + 1; - enqueue( ScrollCommand{ position, 0, commandId } ); + + if ( !enqueue( ScrollCommand{ position, 0, commandId } ) ) + return 0; + return commandId; } @@ -379,7 +382,8 @@ void TerminalController::restart( PtyPtr&& pty, ProcPtr&& process ) { } std::shared_ptr TerminalController::snapshot() const { - return mPublishedSnapshot.load( std::memory_order_acquire ); + std::lock_guard lock( mPublishedSnapshotMutex ); + return mPublishedSnapshot; } std::optional @@ -426,7 +430,10 @@ void TerminalController::enqueueEvent( Event event, bool coalescable ) { void TerminalController::publishSnapshot( std::shared_ptr snapshot ) { const Uint64 generation = snapshot->generation; - mPublishedSnapshot.store( std::move( snapshot ), std::memory_order_release ); + { + std::lock_guard lock( mPublishedSnapshotMutex ); + mPublishedSnapshot = std::move( snapshot ); + } Event event{ EventType::SnapshotReady }; event.generation = generation; enqueueEvent( std::move( event ), true );