Skip to content

Conversation

@benhillis
Copy link
Member

@benhillis benhillis commented Jan 20, 2026

This was broken by #13843.

The ConsoleInput and ConsoleOutput classes used = default move operations, which caused the moved-from temporary's destructor to restore the original console mode (re-enabling ENABLE_PROCESSED_INPUT) after the object was moved into the std::optional. The fix uses emplace() to construct objects directly in-place, avoiding moves entirely. Move operations are now deleted to prevent future misuse.

…ove operator

The ConsoleInput and ConsoleOutput classes used = default move operations, which caused the moved-from temporary's destructor to restore the original console mode (re-enabling ENABLE_PROCESSED_INPUT) after the object was moved into the std::optional. The fix uses emplace() to construct objects directly in-place, avoiding moves entirely. Move operations are now deleted to prevent future misuse.
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request fixes a bug where ConsoleInput and ConsoleOutput RAII classes incorrectly restored the original console mode due to default move operations. When objects were moved into std::optional, the moved-from object's destructor would reset the console state, causing the console mode to be incorrectly restored.

Changes:

  • Deleted move constructors and move assignment operators for ConsoleInput and ConsoleOutput to prevent future misuse
  • Changed from factory pattern (static Create() methods with private constructors) to direct construction with public constructors
  • Updated SvcCommIo constructor to use emplace() for in-place construction, avoiding move operations entirely

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
src/windows/common/svccommio.hpp Made constructors public, deleted move operations, updated member initialization to use brace-initialization
src/windows/common/svccommio.cpp Removed Create() factory methods, moved code page initialization to member initializer lists, updated SvcCommIo constructor to use emplace() for in-place construction

@benhillis benhillis merged commit a03462f into master Jan 20, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants