shill: make fewer request_name calls

Prior to this CL, we were making a request_name call every
time we instantiated a D-Bus adaptor. For example, we'd
call request_name every time a service was created.

Each request_name call, in turn, leads to a add_match call.
(To listen for messages sent to that name.) Eventually, we
exhaust dbus-daemon's limit on the number of match rules
for a single process. (The limit seems to be ~500.)

Note that we hit this limit even without 500 _simultaneous_
services, because destroying a service doesn't remove the
match rule. (The rule isn't created in the service ctor,
but rather, in CreateServiceAdaptor. And we have no
analogue for releasing a service adaptor.)

We could resolve the matter by arranging to remove match
rules when a service goes away. However, noting that all
the request_name calls ask for ownership of the same, a
simpler solution is possible. Namely, request the name once
(in Init), rather than every time an adaptor is created.

BUG=chromium-os:27339
TEST=WiFiManager, unit tests, manual

Manual test: enable/disable WiFi many times in a loop,
so that WiFi continutally instantiates and destroys
services. Before this CL, shill crashes when instantiating
the 500-th (or so) service. With the CL, shill continues
to run after instantiating its 2900-th service.

Note that https://gerrit.chromium.org/gerrit/#change,18123
was applied to facilitate manual testing (the CL provides
enable/disable support).

Change-Id: I032d8c57b3a120cecd51c02a98388bb22bb3b644
Reviewed-on: https://gerrit.chromium.org/gerrit/18185
Reviewed-by: Paul Stewart <pstew@chromium.org>
Reviewed-by: Darin Petkov <petkov@chromium.org>
Commit-Ready: mukesh agrawal <quiche@chromium.org>
Tested-by: mukesh agrawal <quiche@chromium.org>
14 files changed
tree: a2af298a9865e30ead81885e0222a41f8515b857
  1. dbus_bindings/
  2. .gitignore
  3. accessor_interface.h
  4. adaptor_interfaces.h
  5. async_call_handler.cc
  6. async_call_handler.h
  7. async_connection.cc
  8. async_connection.h
  9. async_connection_unittest.cc
  10. byte_string.cc
  11. byte_string.h
  12. byte_string_unittest.cc
  13. cellular.cc
  14. cellular.h
  15. cellular_capability.cc
  16. cellular_capability.h
  17. cellular_capability_cdma.cc
  18. cellular_capability_cdma.h
  19. cellular_capability_cdma_unittest.cc
  20. cellular_capability_gsm.cc
  21. cellular_capability_gsm.h
  22. cellular_capability_gsm_unittest.cc
  23. cellular_capability_unittest.cc
  24. cellular_error.cc
  25. cellular_error.h
  26. cellular_service.cc
  27. cellular_service.h
  28. cellular_service_unittest.cc
  29. cellular_unittest.cc
  30. connection.cc
  31. connection.h
  32. connection_unittest.cc
  33. control_interface.h
  34. crypto_des_cbc.cc
  35. crypto_des_cbc.h
  36. crypto_des_cbc_unittest.cc
  37. crypto_interface.h
  38. crypto_provider.cc
  39. crypto_provider.h
  40. crypto_provider_unittest.cc
  41. crypto_rot47.cc
  42. crypto_rot47.h
  43. crypto_rot47_unittest.cc
  44. dbus_adaptor.cc
  45. dbus_adaptor.h
  46. dbus_adaptor_unittest.cc
  47. dbus_control.cc
  48. dbus_control.h
  49. dbus_objectmanager_proxy.cc
  50. dbus_objectmanager_proxy.h
  51. dbus_objectmanager_proxy_interface.h
  52. dbus_properties.cc
  53. dbus_properties.h
  54. dbus_properties_proxy.cc
  55. dbus_properties_proxy.h
  56. dbus_properties_proxy_interface.h
  57. dbus_properties_unittest.cc
  58. default_profile.cc
  59. default_profile.h
  60. default_profile_unittest.cc
  61. device.cc
  62. device.h
  63. device_dbus_adaptor.cc
  64. device_dbus_adaptor.h
  65. device_info.cc
  66. device_info.h
  67. device_info_unittest.cc
  68. device_stub.h
  69. device_unittest.cc
  70. dhcp_config.cc
  71. dhcp_config.h
  72. dhcp_config_unittest.cc
  73. dhcp_provider.cc
  74. dhcp_provider.h
  75. dhcp_provider_unittest.cc
  76. dhcp_proxy_interface.h
  77. dhcpcd_proxy.cc
  78. dhcpcd_proxy.h
  79. dns_client.cc
  80. dns_client.h
  81. dns_client_unittest.cc
  82. endpoint.cc
  83. endpoint.h
  84. ephemeral_profile.cc
  85. ephemeral_profile.h
  86. error.cc
  87. error.h
  88. error_unittest.cc
  89. ethernet.cc
  90. ethernet.h
  91. ethernet_service.cc
  92. ethernet_service.h
  93. event_dispatcher.cc
  94. event_dispatcher.h
  95. glib.cc
  96. glib.h
  97. glib_io_input_handler.cc
  98. glib_io_input_handler.h
  99. glib_io_ready_handler.cc
  100. glib_io_ready_handler.h
  101. HACKING
  102. http_proxy.cc
  103. http_proxy.h
  104. http_proxy_unittest.cc
  105. http_request.cc
  106. http_request.h
  107. http_request_unittest.cc
  108. http_url.cc
  109. http_url.h
  110. http_url_unittest.cc
  111. ieee80211.h
  112. io_handler.h
  113. ip_address.cc
  114. ip_address.h
  115. ip_address_unittest.cc
  116. ipconfig.cc
  117. ipconfig.h
  118. ipconfig_dbus_adaptor.cc
  119. ipconfig_dbus_adaptor.h
  120. ipconfig_unittest.cc
  121. key_file_store.cc
  122. key_file_store.h
  123. key_file_store_unittest.cc
  124. key_value_store.cc
  125. key_value_store.h
  126. key_value_store_unittest.cc
  127. LICENSE
  128. Makefile
  129. manager.cc
  130. manager.h
  131. manager_dbus_adaptor.cc
  132. manager_dbus_adaptor.h
  133. manager_unittest.cc
  134. metrics.cc
  135. metrics.h
  136. metrics_unittest.cc
  137. mm1_modem_modem3gpp_proxy.cc
  138. mm1_modem_modem3gpp_proxy.h
  139. mm1_modem_modem3gpp_proxy_interface.h
  140. mm1_modem_modemcdma_proxy.cc
  141. mm1_modem_modemcdma_proxy.h
  142. mm1_modem_modemcdma_proxy_interface.h
  143. mm1_modem_proxy.cc
  144. mm1_modem_proxy.h
  145. mm1_modem_proxy_interface.h
  146. mm1_modem_simple_proxy.cc
  147. mm1_modem_simple_proxy.h
  148. mm1_modem_simple_proxy_interface.h
  149. mock_adaptors.cc
  150. mock_adaptors.h
  151. mock_ares.cc
  152. mock_ares.h
  153. mock_async_connection.cc
  154. mock_async_connection.h
  155. mock_connection.cc
  156. mock_connection.h
  157. mock_control.cc
  158. mock_control.h
  159. mock_dbus_objectmanager_proxy.cc
  160. mock_dbus_objectmanager_proxy.h
  161. mock_dbus_properties_proxy.cc
  162. mock_dbus_properties_proxy.h
  163. mock_device.cc
  164. mock_device.h
  165. mock_device_info.cc
  166. mock_device_info.h
  167. mock_dhcp_config.cc
  168. mock_dhcp_config.h
  169. mock_dhcp_provider.cc
  170. mock_dhcp_provider.h
  171. mock_dhcp_proxy.cc
  172. mock_dhcp_proxy.h
  173. mock_dns_client.cc
  174. mock_dns_client.h
  175. mock_event_dispatcher.cc
  176. mock_event_dispatcher.h
  177. mock_glib.cc
  178. mock_glib.h
  179. mock_http_request.cc
  180. mock_http_request.h
  181. mock_ipconfig.cc
  182. mock_ipconfig.h
  183. mock_manager.cc
  184. mock_manager.h
  185. mock_metrics.cc
  186. mock_metrics.h
  187. mock_modem_cdma_proxy.cc
  188. mock_modem_cdma_proxy.h
  189. mock_modem_gsm_card_proxy.cc
  190. mock_modem_gsm_card_proxy.h
  191. mock_modem_gsm_network_proxy.cc
  192. mock_modem_gsm_network_proxy.h
  193. mock_modem_manager_proxy.cc
  194. mock_modem_manager_proxy.h
  195. mock_modem_proxy.cc
  196. mock_modem_proxy.h
  197. mock_modem_simple_proxy.cc
  198. mock_modem_simple_proxy.h
  199. mock_portal_detector.cc
  200. mock_portal_detector.h
  201. mock_power_manager.cc
  202. mock_power_manager.h
  203. mock_power_manager_proxy.cc
  204. mock_power_manager_proxy.h
  205. mock_profile.cc
  206. mock_profile.h
  207. mock_property_store.cc
  208. mock_property_store.h
  209. mock_proxy_factory.cc
  210. mock_proxy_factory.h
  211. mock_resolver.cc
  212. mock_resolver.h
  213. mock_routing_table.cc
  214. mock_routing_table.h
  215. mock_rtnl_handler.cc
  216. mock_rtnl_handler.h
  217. mock_service.cc
  218. mock_service.h
  219. mock_sockets.cc
  220. mock_sockets.h
  221. mock_store.cc
  222. mock_store.h
  223. mock_supplicant_bss_proxy.cc
  224. mock_supplicant_bss_proxy.h
  225. mock_supplicant_interface_proxy.cc
  226. mock_supplicant_interface_proxy.h
  227. mock_supplicant_process_proxy.cc
  228. mock_supplicant_process_proxy.h
  229. mock_time.cc
  230. mock_time.h
  231. mock_vpn.cc
  232. mock_vpn.h
  233. mock_vpn_driver.cc
  234. mock_vpn_driver.h
  235. mock_vpn_service.cc
  236. mock_vpn_service.h
  237. mock_wifi.cc
  238. mock_wifi.h
  239. mock_wifi_service.cc
  240. mock_wifi_service.h
  241. modem.cc
  242. modem.h
  243. modem_cdma_proxy.cc
  244. modem_cdma_proxy.h
  245. modem_cdma_proxy_interface.h
  246. modem_gsm_card_proxy.cc
  247. modem_gsm_card_proxy.h
  248. modem_gsm_card_proxy_interface.h
  249. modem_gsm_network_proxy.cc
  250. modem_gsm_network_proxy.h
  251. modem_gsm_network_proxy_interface.h
  252. modem_info.cc
  253. modem_info.h
  254. modem_info_unittest.cc
  255. modem_manager.cc
  256. modem_manager.h
  257. modem_manager_proxy.cc
  258. modem_manager_proxy.h
  259. modem_manager_proxy_interface.h
  260. modem_manager_unittest.cc
  261. modem_proxy.cc
  262. modem_proxy.h
  263. modem_proxy_interface.h
  264. modem_simple_proxy.cc
  265. modem_simple_proxy.h
  266. modem_simple_proxy_interface.h
  267. modem_unittest.cc
  268. nice_mock_control.cc
  269. nice_mock_control.h
  270. openvpn_driver.cc
  271. openvpn_driver.h
  272. openvpn_driver_unittest.cc
  273. portal_detector.cc
  274. portal_detector.h
  275. portal_detector_unittest.cc
  276. power_manager.cc
  277. power_manager.h
  278. power_manager_proxy.cc
  279. power_manager_proxy.h
  280. power_manager_proxy_interface.h
  281. power_manager_unittest.cc
  282. profile.cc
  283. profile.h
  284. profile_dbus_adaptor.cc
  285. profile_dbus_adaptor.h
  286. profile_dbus_property_exporter.cc
  287. profile_dbus_property_exporter.h
  288. profile_dbus_property_exporter_unittest.cc
  289. profile_unittest.cc
  290. property_accessor.h
  291. property_accessor_unittest.cc
  292. property_iterator.h
  293. property_store.cc
  294. property_store.h
  295. property_store_unittest.cc
  296. property_store_unittest.h
  297. provider_db_unittest.bfd
  298. proxy_factory.cc
  299. proxy_factory.h
  300. refptr_types.h
  301. resolver.cc
  302. resolver.h
  303. resolver_unittest.cc
  304. routing_table.cc
  305. routing_table.h
  306. routing_table_entry.h
  307. routing_table_unittest.cc
  308. rpc_task.cc
  309. rpc_task.h
  310. rpc_task_dbus_adaptor.cc
  311. rpc_task_dbus_adaptor.h
  312. rpc_task_unittest.cc
  313. rtnl_handler.cc
  314. rtnl_handler.h
  315. rtnl_handler_unittest.cc
  316. rtnl_listener.cc
  317. rtnl_listener.h
  318. rtnl_listener_unittest.cc
  319. rtnl_message.cc
  320. rtnl_message.h
  321. rtnl_message_unittest.cc
  322. service.cc
  323. service.h
  324. service_dbus_adaptor.cc
  325. service_dbus_adaptor.h
  326. service_sorter.h
  327. service_under_test.cc
  328. service_under_test.h
  329. service_unittest.cc
  330. shill.conf
  331. shill_ares.cc
  332. shill_ares.h
  333. shill_config.cc
  334. shill_config.h
  335. shill_daemon.cc
  336. shill_daemon.h
  337. shill_main.cc
  338. shill_test_config.cc
  339. shill_test_config.h
  340. shill_time.cc
  341. shill_time.h
  342. shill_unittest.cc
  343. sockets.cc
  344. sockets.h
  345. store_interface.h
  346. supplicant_bss_proxy.cc
  347. supplicant_bss_proxy.h
  348. supplicant_bss_proxy_interface.h
  349. supplicant_interface_proxy.cc
  350. supplicant_interface_proxy.h
  351. supplicant_interface_proxy_interface.h
  352. supplicant_process_proxy.cc
  353. supplicant_process_proxy.h
  354. supplicant_process_proxy_interface.h
  355. technology.cc
  356. technology.h
  357. TESTING
  358. testrunner.cc
  359. vpn.cc
  360. vpn.h
  361. vpn_driver.h
  362. vpn_provider.cc
  363. vpn_provider.h
  364. vpn_provider_unittest.cc
  365. vpn_service.cc
  366. vpn_service.h
  367. vpn_service_unittest.cc
  368. vpn_unittest.cc
  369. wifi.cc
  370. wifi.h
  371. wifi_endpoint.cc
  372. wifi_endpoint.h
  373. wifi_endpoint_unittest.cc
  374. wifi_service.cc
  375. wifi_service.h
  376. wifi_service_unittest.cc
  377. wifi_unittest.cc
  378. wpa_supplicant.cc
  379. wpa_supplicant.h