Skip to content

Commit 31086a6

Browse files
committed
Fix wakeup socket deletion on stopping of select thread
1 parent c97e7ec commit 31086a6

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

lib/dnsruby/select_thread.rb

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -228,17 +228,20 @@ def do_select
228228
if (unused_loop_count > 10 && @@query_hash.empty? && @@observers.empty?)
229229
Dnsruby.log.debug("Try stop select loop")
230230

231+
# We leave the @@wakeup_sockets here, but remove everything else
231232
non_persistent_sockets = @@sockets.select { |s| ! @@socket_is_persistent[s] }
232233
non_persistent_sockets.each do |socket|
233-
socket.close rescue nil
234-
@@sockets.delete(socket)
234+
if socket != @@wakeup_sockets[1]
235+
socket.close rescue nil
236+
@@sockets.delete(socket)
237+
end
235238
end
236239

237-
Dnsruby.log.debug("Deleted #{non_persistent_sockets.size} non-persistent sockets," +
238-
" #{@@sockets.count} persistent sockets remain.")
240+
Dnsruby.log.debug("Deleted #{non_persistent_sockets.size - 1} non-persistent sockets," +
241+
" #{@@sockets.count - 1} persistent sockets remain.")
239242
@@socket_hash.clear
240243

241-
if @@sockets.empty?
244+
if @@sockets.size == 1
242245
Dnsruby.log.debug("Stopping select loop")
243246
return
244247
end
@@ -251,10 +254,11 @@ def do_select
251254
# Removes closed sockets from @@sockets, and returns an array containing 1
252255
# exception for each closed socket contained in @@socket_hash.
253256
def clean_up_closed_sockets
257+
exceptions = []
254258
@@mutex.synchronize do
255259
closed_sockets_in_hash = @@sockets.select(&:closed?).select { |s| @@socket_hash[s] }
256260
@@sockets.delete_if { | socket | socket.closed? }
257-
closed_sockets_in_hash.each_with_object([]) do |socket, exceptions|
261+
closed_sockets_in_hash.each_with_object([]) do |socket, exception|
258262
@@socket_hash[socket].each do | client_id |
259263
exceptions << [SocketEofResolvError.new("TCP socket closed before all answers received"), socket, client_id]
260264
end

0 commit comments

Comments
 (0)