shill: cellular: Destroy cellular service before deregistering cellular device.
This ensures that when a Modem instance is destructed:
- The connection, if any, is dropped.
- The service, if any, is deregistered from the Manager.
- Circular references between the device and the service are eliminated.
- The service is destructed.
- The device is destructed.
Also, add extra logging at INFO level for infrequent but key events
such as Device construction and destruction.
BUG=chromium-os:31504
TEST=unit tests
Change-Id: I2e5a3d010339bfd32686a6a83a71b35b29edcbbc
Reviewed-on: https://gerrit.chromium.org/gerrit/26232
Commit-Ready: Darin Petkov <petkov@chromium.org>
Reviewed-by: Darin Petkov <petkov@chromium.org>
Tested-by: Darin Petkov <petkov@chromium.org>
diff --git a/modem.cc b/modem.cc
index c54e76c..62ab19f 100644
--- a/modem.cc
+++ b/modem.cc
@@ -49,7 +49,9 @@
}
Modem::~Modem() {
- if (device_.get()) {
+ LOG(INFO) << "Modem destructed: " << owner_ << " at " << path_;
+ if (device_) {
+ device_->DestroyService();
manager_->device_info()->DeregisterDevice(device_);
}
}