Skip to content

Commit a9df8d3

Browse files
authored
Remove id from query_hash when retrying over TCP due to UDP truncation (#213)
* Remember to remove id from query_hash when retrying over TCP due to UDP truncation * Comment remove_id_from_mutex_synchronized_block
1 parent ffa3269 commit a9df8d3

File tree

1 file changed

+19
-17
lines changed

1 file changed

+19
-17
lines changed

lib/dnsruby/select_thread.rb

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -372,21 +372,25 @@ def persistent?(socket)
372372
end
373373

374374
def remove_id(id)
375-
376375
@@mutex.synchronize do
377-
socket = @@query_hash[id].socket
378-
@@timeouts.delete(id)
379-
@@query_hash.delete(id)
380-
@@socket_hash[socket].delete(id)
381-
382-
decrement_remaining_queries(socket) if persistent?(socket)
383-
384-
if !persistent?(socket) || max_attained?(socket)
385-
@@sockets.delete(socket)
386-
@@socket_hash.delete(socket)
387-
Dnsruby.log.debug("Closing socket #{socket}")
388-
socket.close rescue nil
389-
end
376+
remove_id_from_mutex_synchronized_block(id)
377+
end
378+
end
379+
380+
# THIS MUST BE CALLED FROM INSIDE A @@mutex SYNCHRONISED BLOCK!
381+
def remove_id_from_mutex_synchronized_block(id)
382+
socket = @@query_hash[id].socket
383+
@@timeouts.delete(id)
384+
@@query_hash.delete(id)
385+
@@socket_hash[socket].delete(id)
386+
387+
decrement_remaining_queries(socket) if persistent?(socket)
388+
389+
if !persistent?(socket) || max_attained?(socket)
390+
@@sockets.delete(socket)
391+
@@socket_hash.delete(socket)
392+
Dnsruby.log.debug("Closing socket #{socket}")
393+
socket.close rescue nil
390394
end
391395
end
392396

@@ -550,12 +554,10 @@ def get_incoming_data(socket, packet_size)
550554
query_header_id = @@query_hash[id].query.header.id
551555
if (query_header_id == e.partial_message.header.id)
552556
# process the response
553-
client_queue = nil
554-
res = nil
555-
query=nil
556557
client_queue = @@query_hash[id].client_queue
557558
res = @@query_hash[id].single_resolver
558559
query = @@query_hash[id].query
560+
remove_id_from_mutex_synchronized_block(id)
559561

560562
# NOW RESEND OVER TCP!
561563
Thread.new {

0 commit comments

Comments
 (0)