From 548e838faa246debe37a431244f6c577efbb044a Mon Sep 17 00:00:00 2001
From: Martin Stjernholm <mast@lysator.liu.se>
Date: Sun, 13 Mar 2011 15:43:56 +0100
Subject: [PATCH] Improved unregister() to find stuff in joinnodes a bit
 better.

---
 lib/master.pike.in | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/lib/master.pike.in b/lib/master.pike.in
index 1f08aa5e50..771505bfd4 100644
--- a/lib/master.pike.in
+++ b/lib/master.pike.in
@@ -1952,10 +1952,16 @@ void unregister(program p)
     else
       programs[fname] = no_value;
 
+    string name = program_path_to_name (fname);
+    mixed n = has_value (name, ".") ?
+      resolv ((name / ".")[..<1] * ".") :
+      get_root_module();
+    if (objectp (n) && (n->is_resolv_dirnode || n->is_resolv_joinnode))
+      n->delete_value (p);
+
     fname = dirname (fname);
-    object n;
     if ( fname!="" && objectp (n = fc[fname]) )
-      if (n->is_resolv_dirnode || n->is_resolv_joinnode)
+      if (n->is_resolv_dirnode) // Won't find joinnodes in fc.
 	n->delete_value (p);
   }
 
@@ -1971,7 +1977,7 @@ void unregister(program p)
       else
 	fc[name] = no_value;
 
-  // FIXME: Delete from caches in dirnodes and joinnodes.
+  // FIXME: What about compat handlers?
 }
 
 protected program findprog(string pname,
-- 
GitLab