Skip to content

Commit 70b28bb

Browse files
montanalownateberkopec
authored andcommitted
Avoid mutating global STDOUT & STDERR (#1837)
1 parent f89f194 commit 70b28bb

File tree

3 files changed

+14
-5
lines changed

3 files changed

+14
-5
lines changed

lib/puma/events.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ def call(str)
2929
#
3030
def initialize(stdout, stderr)
3131
@formatter = DefaultFormatter.new
32-
@stdout = stdout
33-
@stderr = stderr
32+
@stdout = stdout.dup
33+
@stderr = stderr.dup
3434

3535
@stdout.sync = true
3636
@stderr.sync = true

test/test_events.rb

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ def test_null
66

77
assert_instance_of Puma::NullIO, events.stdout
88
assert_instance_of Puma::NullIO, events.stderr
9-
assert_equal events.stdout, events.stderr
109
end
1110

1211
def test_strings
@@ -19,8 +18,17 @@ def test_strings
1918
def test_stdio
2019
events = Puma::Events.stdio
2120

22-
assert_equal STDOUT, events.stdout
23-
assert_equal STDERR, events.stderr
21+
# events.stdout is a dup, so same file handle, different ruby object, but inspect should show the same file handle
22+
assert_equal STDOUT.inspect, events.stdout.inspect
23+
assert_equal STDERR.inspect, events.stderr.inspect
24+
end
25+
26+
def test_stdio_respects_sync
27+
STDOUT.sync = false
28+
events = Puma::Events.stdio
29+
30+
assert !STDOUT.sync
31+
assert events.stdout.sync
2432
end
2533

2634
def test_register_callback_with_block

test/test_tcp_logger.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ def test_events
1818
# in lib/puma/launcher.rb:85
1919
# Puma::Events is default tcp_logger for cluster mode
2020
logger = Puma::Events.new(STDOUT, STDERR)
21+
logger.instance_variable_set(:@stdout, $stdout) # ensure capture_process_io has access to the loggers output
2122
out, err = capture_subprocess_io do
2223
Puma::TCPLogger.new(logger, @server.app).call({}, @socket)
2324
end

0 commit comments

Comments
 (0)