loader: fix leak of child-to-parent links on dlclose()
am: 772db5e6d4

Change-Id: I538995372384103dcbd1ca6f3ff5fcd4ae80c972
diff --git a/linker/linker.cpp b/linker/linker.cpp
index 54867dc..d200c22 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -884,12 +884,11 @@
   }
 
   if (si == parent) {
-    DL_ERR("recursive link to \"%s\"", si->name);
     return true;
   }
 
-  return !parent->get_parents().visit([&](soinfo* grandparent) {
-    return !is_recursive(si, grandparent);
+  return !si->get_children().visit([&](soinfo* child) {
+    return !is_recursive(child, parent);
   });
 }
 
@@ -928,6 +927,7 @@
     soinfo* needed_by = task->get_needed_by();
 
     if (is_recursive(si, needed_by)) {
+      DL_ERR("recursive link to \"%s\"", si->name);
       return false;
     }
 
@@ -1706,7 +1706,6 @@
 
 void soinfo::add_child(soinfo* child) {
   if (has_min_version(0)) {
-    child->parents.push_back(this);
     this->children.push_back(child);
   }
 }