[devmgr] Remove Devnode from devfs on desctruct
This allows devfs to be initialized in tests, and then shutdown without
aborting on the intrusive list destructor.
ZX-3286
Test: Ran Fuchsia and /system/test/ddk tests.
Change-Id: If4160854844ef14941d66c2e06675f0fc9fd9a8a
diff --git a/system/core/devmgr/devmgr/devfs.cpp b/system/core/devmgr/devmgr/devfs.cpp
index 6d79282..d5325dc 100644
--- a/system/core/devmgr/devmgr/devfs.cpp
+++ b/system/core/devmgr/devmgr/devfs.cpp
@@ -107,6 +107,7 @@
// BUG(ZX-2868): We currently never free these after allocating them
struct Devnode {
explicit Devnode(fbl::String name);
+ ~Devnode();
Devnode(const Devnode&) = delete;
Devnode& operator=(const Devnode&) = delete;
@@ -549,8 +550,11 @@
: name(std::move(name)) {
}
-DcIostate::DcIostate(Devnode* dn) : devnode_(dn) {
+Devnode::~Devnode() {
+ devfs_remove(this);
+}
+DcIostate::DcIostate(Devnode* dn) : devnode_(dn) {
devnode_->iostate.push_back(this);
}