diff --git a/lib/master.pike.in b/lib/master.pike.in index 1f08aa5e50740de7ca9ef880451e961ad715b3f1..771505bfd448e0042b87198d693d7ef374bf99e4 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,