@@ -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