Fix private DNS not working due to getConnectCounter() stuck

This call is not necessary to be protected by DnsTlsDispatcher::sLock.
The lock aims at protecting the creation/deletion of DnsTlsTransport.
Since the call is used only for the metrics, this change doesn't impact
on the functionality of private DNS.

Bug description:
When a thread gets stuck in TLS handshake, it might lead to another
thread blocking in the call getConnectCounter(). This results in
other DNS requests get stuck in the call getOrderedServerList()
because they are awaiting a lock hold by the second thread which
is also awaiting another lock hold by the first thread.

An example scenario is: In DNS strict mode, a private DNS server
used to be available in mobile data but becomes unresponsive.
Then, a new DNS request triggers the DnsResolver to do handshaking.
Before the handshake finishes, wifi can't work.

How to reproduce the bug:
  1) Set DNS strict mode, turn on mobile data
  2) Wait 20s for TLS connection disconnected. It can be check by:
       - ps -AT $(pidof netd) | grep "TlsListen"
  3) Drop DoT traffic by the command:
       - iptables -A OUTPUT -p tcp --dport 853 -o rmnet_data1 -j DROP
  4) Turn on wifi. Wifi shows no internet

Bug: 160027328
Test: not reproducible by the above steps
Test: cd packages/modules/DnsResolver && atest

Change-Id: I050ce8f13c19f706d58bac44c0e5a269481cb0c0
1 file changed
tree: f10678933ef32ccaeb08734a89d0164d63d0c927
  1. aidl_api/
  2. apex/
  3. binder/
  4. include/
  5. tests/
  6. .editorconfig
  7. Android.bp
  8. Dns64Configuration.cpp
  9. Dns64Configuration.h
  10. DnsProxyListener.cpp
  11. DnsProxyListener.h
  12. DnsQueryLog.cpp
  13. DnsQueryLog.h
  14. DnsQueryLogTest.cpp
  15. DnsResolver.cpp
  16. DnsResolver.h
  17. DnsResolverService.cpp
  18. DnsResolverService.h
  19. DnsStats.cpp
  20. DnsStats.h
  21. DnsStatsTest.cpp
  22. DnsTlsDispatcher.cpp
  23. DnsTlsDispatcher.h
  24. DnsTlsQueryMap.cpp
  25. DnsTlsQueryMap.h
  26. DnsTlsServer.cpp
  27. DnsTlsServer.h
  28. DnsTlsSessionCache.cpp
  29. DnsTlsSessionCache.h
  30. DnsTlsSocket.cpp
  31. DnsTlsSocket.h
  32. DnsTlsSocketFactory.h
  33. DnsTlsTransport.cpp
  34. DnsTlsTransport.h
  35. Experiments.cpp
  36. Experiments.h
  37. ExperimentsTest.cpp
  38. getaddrinfo.cpp
  39. getaddrinfo.h
  40. gethnamaddr.cpp
  41. gethnamaddr.h
  42. hostent.h
  43. IDnsTlsSocket.h
  44. IDnsTlsSocketFactory.h
  45. IDnsTlsSocketObserver.h
  46. libnetd_resolv.map.txt
  47. LockedQueue.h
  48. NOTICE
  49. OWNERS
  50. params.h
  51. PREUPLOAD.cfg
  52. PrivateDnsConfiguration.cpp
  53. PrivateDnsConfiguration.h
  54. README-DoT.md
  55. README.md
  56. res_cache.cpp
  57. res_comp.cpp
  58. res_comp.h
  59. res_debug.cpp
  60. res_debug.h
  61. res_init.cpp
  62. res_init.h
  63. res_mkquery.cpp
  64. res_query.cpp
  65. res_send.cpp
  66. res_send.h
  67. res_stats.cpp
  68. resolv_cache.h
  69. resolv_cache_unit_test.cpp
  70. resolv_callback_unit_test.cpp
  71. resolv_private.h
  72. resolv_test_config_template.xml
  73. resolv_tls_unit_test.cpp
  74. resolv_unit_test.cpp
  75. ResolverController.cpp
  76. ResolverController.h
  77. ResolverEventReporter.cpp
  78. ResolverEventReporter.h
  79. ResolverStats.h
  80. sethostent.cpp
  81. stats.h
  82. stats.proto
  83. TEST_MAPPING
  84. util.cpp
  85. util.h
README.md

Logging

This code uses LOG(X) for logging. Log levels are VERBOSE,DEBUG,INFO,WARNING and ERROR. The default setting is WARNING and logs relate to WARNING and ERROR will be shown. If you want to enable the DEBUG level logs, using following command. adb shell service call dnsresolver 10 i32 1 VERBOSE 0 DEBUG 1 INFO 2 WARNING 3 ERROR 4 Verbose resolver logs could contain PII -- do NOT enable in production builds.