Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Confirm that resource usage is still 0 before retiring #17

Merged
merged 1 commit into from
Apr 22, 2024

Conversation

zarqman
Copy link
Contributor

@zarqman zarqman commented Oct 27, 2023

This PR adds a secondary check that a resource is unused during pruning.

Per existing comments, retiring resources may cause context switches. When there are 2+ resources that are eligible for retiring, a context switch caused by retiring an earlier resource may also allow a later resource in the unused list to be reused. That may in turn cause a newly reused resource to be errantly retired and closed while in use.

Types of Changes

  • Bug fix.

Contribution

Copy link
Member

@ioquatix ioquatix left a comment

Choose a reason for hiding this comment

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

I was trying to avoid the extra hash lookup but this seems correct.

@ioquatix ioquatix merged commit ed9050c into socketry:main Apr 22, 2024
14 of 24 checks passed
ioquatix added a commit that referenced this pull request Apr 22, 2024
@ioquatix
Copy link
Member

I had to revert this as it was breaking the async-http test suite.

describe Async::HTTP::Protocol::HTTP10 it behaves like a proxy with proxied client it can get insecure website test/async/http/proxy.rb:242:174
	expect "CONNECT" to
		be == "CONNECT"
			✓ assertion passed test/async/http/proxy.rb:122
	⚠ Async::TimeoutError: Run time exceeded timeout 60s:
	#<Async::Reactor:0x00000000001b9414 1 children (running)>
		#<Async::Task:0x00000000001b9428 it can get insecure website (running)>
		→ /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:125:in `transfer'
		  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:125:in `transfer'
		  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/condition.rb:38:in `block in wait'
		  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/list.rb:85:in `stack'
		  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/condition.rb:37:in `wait'
		  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:193:in `wait'
		  /home/samuel/.gem/ruby/3.3.0/gems/sus-fixtures-async-0.1.3/lib/sus/fixtures/async/reactor_context.rb:47:in `run_with_timeout'
		  /home/samuel/.gem/ruby/3.3.0/gems/sus-fixtures-async-0.1.3/lib/sus/fixtures/async/reactor_context.rb:68:in `block in around'
		  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:163:in `block in run'
		  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:376:in `block in schedule'
			#<Async::Task:0x00000000001b943c transient Timer task timeout=60. (running)>
			→ /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:79:in `backtrace'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:79:in `backtrace'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/node.rb:275:in `print_backtrace'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/node.rb:268:in `block in print_hierarchy'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/node.rb:223:in `traverse_recurse'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/node.rb:226:in `block in traverse_recurse'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/list.rb:287:in `each'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/list.rb:300:in `each'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/list.rb:176:in `each'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/node.rb:225:in `traverse_recurse'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/node.rb:226:in `block in traverse_recurse'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/list.rb:287:in `each'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/list.rb:300:in `each'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/list.rb:176:in `each'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/node.rb:225:in `traverse_recurse'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/node.rb:219:in `traverse'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/node.rb:263:in `print_hierarchy'
			  /home/samuel/.gem/ruby/3.3.0/gems/sus-fixtures-async-0.1.3/lib/sus/fixtures/async/reactor_context.rb:25:in `block in run_with_timeout'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:163:in `block in run'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:376:in `block in schedule'
			#<Async::Task:0x00000000001b9450 connected to #<Addrinfo: 127.0.0.1:40649 TCP> [fd=9] (running)>
			→ /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:226:in `io_wait'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:226:in `io_wait'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/wrapper.rb:35:in `wait_readable'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/wrapper.rb:35:in `wait_readable'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/generic.rb:205:in `async_send'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/generic.rb:54:in `block in wrap_blocking_method'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/stream.rb:260:in `fill_read_buffer'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/stream.rb:119:in `read_until'
			  /home/samuel/Projects/socketry/async-http/lib/async/http/protocol/http1/connection.rb:50:in `read_line'
			  /home/samuel/.gem/ruby/3.3.0/gems/protocol-http1-0.19.1/lib/protocol/http1/connection.rb:212:in `read_response_line'
			  /home/samuel/.gem/ruby/3.3.0/gems/protocol-http1-0.19.1/lib/protocol/http1/connection.rb:220:in `read_response'
			  /home/samuel/Projects/socketry/async-http/lib/async/http/protocol/http1/response.rb:15:in `read'
			  /home/samuel/Projects/socketry/async-http/lib/async/http/protocol/http1/client.rb:62:in `call'
			  /home/samuel/.gem/ruby/3.3.0/gems/protocol-http-0.26.4/lib/protocol/http/request.rb:54:in `call'
			  /home/samuel/Projects/socketry/async-http/lib/async/http/client.rb:183:in `make_response'
			  /home/samuel/Projects/socketry/async-http/lib/async/http/client.rb:106:in `call'
			  /home/samuel/.gem/ruby/3.3.0/gems/protocol-http-0.26.4/lib/protocol/http/methods.rb:74:in `block (2 levels) in <class:Methods>'
			  test/async/http/proxy.rb:178:in `block (4 levels) in <top (required)>'
			  /home/samuel/.gem/ruby/3.3.0/gems/sus-0.24.6/lib/sus/it.rb:50:in `block in handle_skip'
			  /home/samuel/.gem/ruby/3.3.0/gems/sus-0.24.6/lib/sus/it.rb:49:in `catch'
			  /home/samuel/.gem/ruby/3.3.0/gems/sus-0.24.6/lib/sus/it.rb:49:in `handle_skip'
			  /home/samuel/.gem/ruby/3.3.0/gems/sus-0.24.6/lib/sus/it.rb:43:in `block (2 levels) in call'
			  /home/samuel/.gem/ruby/3.3.0/gems/sus-0.24.6/lib/sus/base.rb:28:in `around'
			  /home/samuel/.gem/ruby/3.3.0/gems/sus-fixtures-async-0.1.3/lib/sus/fixtures/async/reactor_context.rb:69:in `block (2 levels) in around'
			  /home/samuel/.gem/ruby/3.3.0/gems/sus-fixtures-async-0.1.3/lib/sus/fixtures/async/reactor_context.rb:36:in `block in run_with_timeout'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:163:in `block in run'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:376:in `block in schedule'
				#<Async::Task:0x00000000001b9464 (completed)>
					#<Async::Task:0x00000000001b9478 accepting connections #<Addrinfo: 127.0.0.1:40649 TCP> [fd=6] (running)>
					→ /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:226:in `io_wait'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:226:in `io_wait'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/wrapper.rb:35:in `wait_readable'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/wrapper.rb:35:in `wait_readable'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/generic.rb:205:in `async_send'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/socket.rb:47:in `accept'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/server.rb:19:in `accept_each'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/shared_endpoint.rb:107:in `block in accept'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/shared_endpoint.rb:82:in `block (2 levels) in bind'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:163:in `block in run'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:376:in `block in schedule'
					#<Async::Task:0x00000000001b948c accepting connections #<Addrinfo: [::1]:40875 TCP> [fd=8] (running)>
					→ /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:226:in `io_wait'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:226:in `io_wait'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/wrapper.rb:35:in `wait_readable'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/wrapper.rb:35:in `wait_readable'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/generic.rb:205:in `async_send'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/socket.rb:47:in `accept'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/server.rb:19:in `accept_each'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/shared_endpoint.rb:107:in `block in accept'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/shared_endpoint.rb:82:in `block (2 levels) in bind'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:163:in `block in run'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:376:in `block in schedule'
				#<Async::Task:0x00000000001b94a0 transient Async::Pool::Controller Gardener (running)>
				→ /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:125:in `transfer'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:125:in `transfer'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:51:in `yield'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-pool-0.5.0/lib/async/pool/controller.rb:219:in `block in start_gardener'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:163:in `block in run'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:376:in `block in schedule'
				#<Async::Task:0x00000000001b94b4 transient Async::Pool::Controller Gardener (running)>
				→ /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:125:in `transfer'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:125:in `transfer'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:51:in `yield'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-pool-0.5.0/lib/async/pool/controller.rb:219:in `block in start_gardener'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:163:in `block in run'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:376:in `block in schedule'
				#<Async::Task:0x00000000001b94c8 Tunnelling body. (running)>
				→ /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:125:in `transfer'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:125:in `transfer'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/condition.rb:38:in `block in wait'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/list.rb:85:in `stack'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/condition.rb:37:in `wait'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/queue.rb:45:in `dequeue'
				  /home/samuel/Projects/socketry/async-http/lib/async/http/body/writable.rb:67:in `read'
				  /home/samuel/.gem/ruby/3.3.0/gems/protocol-http-0.26.4/lib/protocol/http/body/readable.rb:73:in `each'
				  /home/samuel/.gem/ruby/3.3.0/gems/protocol-http1-0.19.1/lib/protocol/http1/connection.rb:281:in `write_tunnel_body'
				  /home/samuel/Projects/socketry/async-http/lib/async/http/protocol/http1/client.rb:46:in `block in call'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:163:in `block in run'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:376:in `block in schedule'
				#<Async::Task:0x00000000001b94dc transient Async::HTTP::Body::Pipe writer. (running)>
				→ /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:226:in `io_wait'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:226:in `io_wait'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/wrapper.rb:35:in `wait_readable'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/wrapper.rb:35:in `wait_readable'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/generic.rb:205:in `async_send'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/generic.rb:54:in `block in wrap_blocking_method'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/stream.rb:260:in `fill_read_buffer'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/stream.rb:85:in `read_partial'
				  /home/samuel/Projects/socketry/async-http/lib/async/http/body/pipe.rb:71:in `writer'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:163:in `block in run'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:376:in `block in schedule'
		/home/samuel/.gem/ruby/3.3.0/gems/sus-fixtures-async-0.1.3/lib/sus/fixtures/async/reactor_context.rb:28 block in run_with_timeout
		/home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:163 block in run
		/home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:376 block in schedule
describe Async::HTTP::Protocol::HTTP11 it behaves like a proxy with proxied client with authorization header required with request includes headers it succeeds test/async/http/proxy.rb:246:211
	expect "CONNECT" to
		be == "CONNECT"
			✓ assertion passed test/async/http/proxy.rb:122
	⚠ Async::TimeoutError: Run time exceeded timeout 60s:
	#<Async::Reactor:0x00000000001b9f40 1 children (running)>
		#<Async::Task:0x00000000001b9f54 it succeeds (running)>
		→ /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:125:in `transfer'
		  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:125:in `transfer'
		  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/condition.rb:38:in `block in wait'
		  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/list.rb:85:in `stack'
		  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/condition.rb:37:in `wait'
		  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:193:in `wait'
		  /home/samuel/.gem/ruby/3.3.0/gems/sus-fixtures-async-0.1.3/lib/sus/fixtures/async/reactor_context.rb:47:in `run_with_timeout'
		  /home/samuel/.gem/ruby/3.3.0/gems/sus-fixtures-async-0.1.3/lib/sus/fixtures/async/reactor_context.rb:68:in `block in around'
		  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:163:in `block in run'
		  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:376:in `block in schedule'
			#<Async::Task:0x00000000001b9f68 transient Timer task timeout=60. (running)>
			→ /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:79:in `backtrace'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:79:in `backtrace'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/node.rb:275:in `print_backtrace'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/node.rb:268:in `block in print_hierarchy'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/node.rb:223:in `traverse_recurse'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/node.rb:226:in `block in traverse_recurse'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/list.rb:287:in `each'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/list.rb:300:in `each'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/list.rb:176:in `each'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/node.rb:225:in `traverse_recurse'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/node.rb:226:in `block in traverse_recurse'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/list.rb:287:in `each'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/list.rb:300:in `each'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/list.rb:176:in `each'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/node.rb:225:in `traverse_recurse'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/node.rb:219:in `traverse'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/node.rb:263:in `print_hierarchy'
			  /home/samuel/.gem/ruby/3.3.0/gems/sus-fixtures-async-0.1.3/lib/sus/fixtures/async/reactor_context.rb:25:in `block in run_with_timeout'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:163:in `block in run'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:376:in `block in schedule'
			#<Async::Task:0x00000000001b9f7c connected to #<Addrinfo: 127.0.0.1:40589 TCP> [fd=9] (running)>
			→ /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:125:in `transfer'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:125:in `transfer'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/condition.rb:38:in `block in wait'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/list.rb:85:in `stack'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/condition.rb:37:in `wait'
			  /home/samuel/Projects/socketry/async-http/lib/async/http/protocol/http2/response.rb:88:in `wait'
			  /home/samuel/Projects/socketry/async-http/lib/async/http/protocol/http2/response.rb:123:in `wait'
			  /home/samuel/Projects/socketry/async-http/lib/async/http/protocol/http2/client.rb:38:in `call'
			  /home/samuel/.gem/ruby/3.3.0/gems/protocol-http-0.26.4/lib/protocol/http/request.rb:54:in `call'
			  /home/samuel/Projects/socketry/async-http/lib/async/http/client.rb:183:in `make_response'
			  /home/samuel/Projects/socketry/async-http/lib/async/http/client.rb:106:in `call'
			  /home/samuel/.gem/ruby/3.3.0/gems/protocol-http-0.26.4/lib/protocol/http/methods.rb:74:in `block (2 levels) in <class:Methods>'
			  test/async/http/proxy.rb:215:in `block (6 levels) in <top (required)>'
			  /home/samuel/.gem/ruby/3.3.0/gems/sus-0.24.6/lib/sus/it.rb:50:in `block in handle_skip'
			  /home/samuel/.gem/ruby/3.3.0/gems/sus-0.24.6/lib/sus/it.rb:49:in `catch'
			  /home/samuel/.gem/ruby/3.3.0/gems/sus-0.24.6/lib/sus/it.rb:49:in `handle_skip'
			  /home/samuel/.gem/ruby/3.3.0/gems/sus-0.24.6/lib/sus/it.rb:43:in `block (2 levels) in call'
			  /home/samuel/.gem/ruby/3.3.0/gems/sus-0.24.6/lib/sus/base.rb:28:in `around'
			  /home/samuel/.gem/ruby/3.3.0/gems/sus-fixtures-async-0.1.3/lib/sus/fixtures/async/reactor_context.rb:69:in `block (2 levels) in around'
			  /home/samuel/.gem/ruby/3.3.0/gems/sus-fixtures-async-0.1.3/lib/sus/fixtures/async/reactor_context.rb:36:in `block in run_with_timeout'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:163:in `block in run'
			  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:376:in `block in schedule'
				#<Async::Task:0x00000000001b9f90 (completed)>
					#<Async::Task:0x00000000001b9fa4 accepting connections #<Addrinfo: 127.0.0.1:40589 TCP> [fd=6] (running)>
					→ /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:226:in `io_wait'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:226:in `io_wait'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/wrapper.rb:35:in `wait_readable'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/wrapper.rb:35:in `wait_readable'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/generic.rb:205:in `async_send'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/socket.rb:47:in `accept'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/server.rb:19:in `accept_each'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/shared_endpoint.rb:107:in `block in accept'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/shared_endpoint.rb:82:in `block (2 levels) in bind'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:163:in `block in run'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:376:in `block in schedule'
					#<Async::Task:0x00000000001b9fb8 accepting connections #<Addrinfo: [::1]:46611 TCP> [fd=8] (running)>
					→ /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:226:in `io_wait'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:226:in `io_wait'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/wrapper.rb:35:in `wait_readable'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/wrapper.rb:35:in `wait_readable'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/generic.rb:205:in `async_send'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/socket.rb:47:in `accept'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/server.rb:19:in `accept_each'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/shared_endpoint.rb:107:in `block in accept'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/shared_endpoint.rb:82:in `block (2 levels) in bind'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:163:in `block in run'
					  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:376:in `block in schedule'
				#<Async::Task:0x00000000001b9fcc transient Async::Pool::Controller Gardener (running)>
				→ /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:125:in `transfer'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:125:in `transfer'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:51:in `yield'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-pool-0.5.0/lib/async/pool/controller.rb:219:in `block in start_gardener'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:163:in `block in run'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:376:in `block in schedule'
				#<Async::Task:0x00000000001b9fe0 transient Async::Pool::Controller Gardener (running)>
				→ /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:125:in `transfer'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:125:in `transfer'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:51:in `yield'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-pool-0.5.0/lib/async/pool/controller.rb:219:in `block in start_gardener'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:163:in `block in run'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:376:in `block in schedule'
				#<Async::Task:0x00000000001b9ff4 Tunnelling body. (running)>
				→ /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:125:in `transfer'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:125:in `transfer'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/condition.rb:38:in `block in wait'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/list.rb:85:in `stack'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/condition.rb:37:in `wait'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/queue.rb:45:in `dequeue'
				  /home/samuel/Projects/socketry/async-http/lib/async/http/body/writable.rb:67:in `read'
				  /home/samuel/.gem/ruby/3.3.0/gems/protocol-http-0.26.4/lib/protocol/http/body/readable.rb:73:in `each'
				  /home/samuel/.gem/ruby/3.3.0/gems/protocol-http1-0.19.1/lib/protocol/http1/connection.rb:281:in `write_tunnel_body'
				  /home/samuel/Projects/socketry/async-http/lib/async/http/protocol/http1/client.rb:46:in `block in call'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:163:in `block in run'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:376:in `block in schedule'
				#<Async::Task:0x00000000001ba008 transient Async::HTTP::Body::Pipe writer. (running)>
				→ /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:226:in `io_wait'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:226:in `io_wait'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/wrapper.rb:35:in `wait_readable'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/wrapper.rb:35:in `wait_readable'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/generic.rb:205:in `async_send'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/generic.rb:54:in `block in wrap_blocking_method'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/stream.rb:260:in `fill_read_buffer'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/stream.rb:85:in `read_partial'
				  /home/samuel/Projects/socketry/async-http/lib/async/http/body/pipe.rb:71:in `writer'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:163:in `block in run'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:376:in `block in schedule'
				#<Async::Task:0x00000000001ba01c transient HTTP/2 reading data for Async::HTTP::Protocol::HTTP2::Client. (running)>
				→ /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:226:in `io_wait'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/scheduler.rb:226:in `io_wait'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/wrapper.rb:35:in `wait_readable'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/wrapper.rb:35:in `wait_readable'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/generic.rb:205:in `async_send'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/generic.rb:54:in `block in wrap_blocking_method'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/stream.rb:260:in `fill_read_buffer'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-io-1.42.1/lib/async/io/stream.rb:69:in `read'
				  /home/samuel/.gem/ruby/3.3.0/gems/protocol-http2-0.16.0/lib/protocol/http2/framer.rb:98:in `read_header'
				  /home/samuel/.gem/ruby/3.3.0/gems/protocol-http2-0.16.0/lib/protocol/http2/framer.rb:70:in `read_frame'
				  /home/samuel/.gem/ruby/3.3.0/gems/protocol-http2-0.16.0/lib/protocol/http2/connection.rb:148:in `read_frame'
				  /home/samuel/Projects/socketry/async-http/lib/async/http/protocol/http2/connection.rb:104:in `block in read_in_background'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:163:in `block in run'
				  /home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:376:in `block in schedule'
		/home/samuel/.gem/ruby/3.3.0/gems/sus-fixtures-async-0.1.3/lib/sus/fixtures/async/reactor_context.rb:28 block in run_with_timeout
		/home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:163 block in run
		/home/samuel/.gem/ruby/3.3.0/gems/async-2.10.2/lib/async/task.rb:376 block in schedule

Do you mind taking a look at what's going on?

@ioquatix
Copy link
Member

Perhaps related test failures: https://github.com/socketry/async-pool/actions/runs/8776705889/job/24080605709

Might indicate race conditions in the implementation or tests.

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.

2 participants