puma 4.1.0 → 4.1.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puma might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4564625669c77dfcd7e4096c40f8b24cb3b7b5a938b97309bbb193566ae0869e
4
- data.tar.gz: 88ae06dc5193587a114ef4f6cec79ad8001333ef9b3fff5c839fd3eea75cf746
3
+ metadata.gz: e85f11b3b0951de326c5bba3f9f11c77bd1f4b28d6bc82d0f33ba8c6f7ebfd2d
4
+ data.tar.gz: 481c1977d845730e2fe5f1186861b6e31f6fe5141f9b90b1d5269a4fcb293657
5
5
  SHA512:
6
- metadata.gz: ec7c5afdb5cb46e8827ad83c189240e426efab3aaf7b4ac9ef5b2d7977203a30495dd082c08b96299b6c050022da57af28065dfe37f5271e50138ab34e81512f
7
- data.tar.gz: 81728699a0f8c0c135f72bd03b6fbb76c405f7bcc138a2f918a4abb6978334528e0e004851fa58da254e6c6abb074cc35401835d61d2a3b2e5d9f2134fd10dff
6
+ metadata.gz: 25f5a271f646bb1d4695279a5fa21a5be43639a01bcd6647adc484f84e84fc2a227097278da57456bf81de4996c749c0f6c80f9fd249e24a79555e44431bb19b
7
+ data.tar.gz: 2defc82769f5c36810f21aaf3f93aaad52e9073e55cb8f19aa0dbc4cfc2dcab37fd0cf458aef58b2025626ff4a59174aff7fa0faa9ebe5a3333fa7dd69ff5df7
data/History.md CHANGED
@@ -6,6 +6,13 @@
6
6
  * Bugfixes
7
7
  * Your bugfix goes here (#Github Number)
8
8
 
9
+ ## 4.1.1 / 2019-09-05
10
+
11
+ * 3 bugfixes
12
+ * Revert our attempt to not dup STDOUT/STDERR (#1946)
13
+ * Fix socket close on error (#1941)
14
+ * Fix workers not shutting down correctly (#1908)
15
+
9
16
  ## 4.1.0 / 2019-08-08
10
17
 
11
18
  * 4 features
@@ -15,7 +15,11 @@ module OpenSSL
15
15
  ssl.accept if @start_immediately
16
16
  ssl
17
17
  rescue SSLError => ex
18
- sock.close
18
+ if ssl
19
+ ssl.close
20
+ else
21
+ sock.close
22
+ end
19
23
  raise ex
20
24
  end
21
25
  end
@@ -35,34 +35,10 @@ module Puma
35
35
  @workers.each { |x| x.term }
36
36
 
37
37
  begin
38
- if RUBY_VERSION < '2.6'
39
- @workers.each do |w|
40
- begin
41
- Process.waitpid(w.pid)
42
- rescue Errno::ECHILD
43
- # child is already terminated
44
- end
45
- end
46
- else
47
- # below code is for a bug in Ruby 2.6+, above waitpid call hangs
48
- t_st = Process.clock_gettime(Process::CLOCK_MONOTONIC)
49
- pids = @workers.map(&:pid)
50
- loop do
51
- pids.reject! do |w_pid|
52
- begin
53
- if Process.waitpid(w_pid, Process::WNOHANG)
54
- log " worker status: #{$?}"
55
- true
56
- end
57
- rescue Errno::ECHILD
58
- true # child is already terminated
59
- end
60
- end
61
- break if pids.empty?
62
- sleep 0.5
63
- end
64
- t_end = Process.clock_gettime(Process::CLOCK_MONOTONIC)
65
- log format(" worker shutdown time: %6.2f", t_end - t_st)
38
+ loop do
39
+ wait_workers
40
+ break if @workers.empty?
41
+ sleep 0.2
66
42
  end
67
43
  rescue Interrupt
68
44
  log "! Cancelled waiting for workers"
@@ -99,6 +75,7 @@ module Puma
99
75
  @last_checkin = Time.now
100
76
  @last_status = '{}'
101
77
  @dead = false
78
+ @term = false
102
79
  end
103
80
 
104
81
  attr_reader :index, :pid, :phase, :signal, :last_checkin, :last_status, :started_at
@@ -120,6 +97,10 @@ module Puma
120
97
  @dead = true
121
98
  end
122
99
 
100
+ def term?
101
+ @term
102
+ end
103
+
123
104
  def ping!(status)
124
105
  @last_checkin = Time.now
125
106
  @last_status = status
@@ -134,9 +115,9 @@ module Puma
134
115
  if @first_term_sent && (Time.now - @first_term_sent) > @options[:worker_shutdown_timeout]
135
116
  @signal = "KILL"
136
117
  else
118
+ @term ||= true
137
119
  @first_term_sent ||= Time.now
138
120
  end
139
-
140
121
  Process.kill @signal, @pid
141
122
  rescue Errno::ESRCH
142
123
  end
@@ -227,12 +208,7 @@ module Puma
227
208
  # during this loop by giving the kernel time to kill them.
228
209
  sleep 1 if any
229
210
 
230
- pids = []
231
- while pid = Process.waitpid(-1, Process::WNOHANG) do
232
- pids << pid
233
- end
234
- @workers.reject! { |w| w.dead? || pids.include?(w.pid) }
235
-
211
+ wait_workers
236
212
  cull_workers
237
213
  spawn_workers
238
214
 
@@ -554,5 +530,24 @@ module Puma
554
530
  @wakeup.close
555
531
  end
556
532
  end
533
+
534
+ private
535
+
536
+ # loops thru @workers, removing workers that exited, and calling
537
+ # `#term` if needed
538
+ def wait_workers
539
+ @workers.reject! do |w|
540
+ begin
541
+ if Process.wait(w.pid, Process::WNOHANG)
542
+ true
543
+ else
544
+ w.term if w.term?
545
+ nil
546
+ end
547
+ rescue Errno::ECHILD
548
+ true # child is already terminated
549
+ end
550
+ end
551
+ end
557
552
  end
558
553
  end
@@ -100,7 +100,7 @@ module Puma
100
100
  # too taxing on performance.
101
101
  module Const
102
102
 
103
- PUMA_VERSION = VERSION = "4.1.0".freeze
103
+ PUMA_VERSION = VERSION = "4.1.1".freeze
104
104
  CODE_NAME = "Fourth and One".freeze
105
105
  PUMA_SERVER_STRING = ['puma', PUMA_VERSION, CODE_NAME].join(' ').freeze
106
106
 
@@ -29,8 +29,8 @@ module Puma
29
29
  #
30
30
  def initialize(stdout, stderr)
31
31
  @formatter = DefaultFormatter.new
32
- @stdout = stdout.dup
33
- @stderr = stderr.dup
32
+ @stdout = stdout
33
+ @stderr = stderr
34
34
 
35
35
  @stdout.sync = true
36
36
  @stderr.sync = true
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puma
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.0
4
+ version: 4.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan Phoenix
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-08 00:00:00.000000000 Z
11
+ date: 2019-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nio4r