def send_async(msg, client_query_id, client_queue)
q = Queue.new
if (!client_queue.kind_of?Queue)
TheLog.error("Wrong type for client_queue in Resolver#send_async")
client_queue.push([client_query_id, ArgumentError.new("Wrong type of client_queue passed to Dnsruby::Resolver#send_async - should have been Queue, was #{client_queue.class}")])
return
end
if (!msg.kind_of?Message)
TheLog.error("Wrong type for msg in Resolver#send_async")
client_queue.push([client_query_id, ArgumentError.new("Wrong type of msg passed to Dnsruby::Resolver#send_async - should have been Message, was #{msg.class}")])
return
end
tick_needed=false
@mutex.synchronize{
tick_needed = true if @query_list.empty?
if (@query_list.has_key?client_query_id)
TheLog.error("Duplicate query id requested (#{client_query_id}")
client_queue.push([client_query_id, ArgumentError.new("Client query ID already in use")])
return
end
outstanding = []
@query_list[client_query_id]=[msg, client_queue, q, outstanding]
query_timeout = Time.now+@query_timeout
if (@query_timeout == 0)
query_timeout = Time.now+31536000
end
@timeouts[client_query_id]=[query_timeout, generate_timeouts()]
}
st = SelectThread.instance
st.add_observer(q, self)
tick if tick_needed
end