Closure access_cl nach Neuladen erzeugen.

Die Closures gehen nach Neuladen verloren, auch wenn
die Ebenen im MEMORY liegen. Daher muessen sie ggf.
neu erzeugt werden.

Change-Id: I4e3889d099ff569e893fa4e99632ae06b61270b7
diff --git a/p/daemon/channeld.c b/p/daemon/channeld.c
index b63e82c..443ad16 100644
--- a/p/daemon/channeld.c
+++ b/p/daemon/channeld.c
@@ -113,7 +113,7 @@
 
 // Private Prototypen
 public int join(string chname, object joining);
-
+private int assert_supervisor(struct channel_s ch);
 
 /* CountUsers() zaehlt die Anzahl Abonnenten aller Ebenen. */
 // TODO: Mapping- und Arrayvarianten bzgl. der Effizienz vergleichen
@@ -517,6 +517,16 @@
   // haben, weil es ja neue Ebenen geben koennte, die dann erstellt werden
   // muessen (verschwundete werden aber nicht aufgeraeumt!)
   create_default_channels();
+  // Es muss fuer alle existierenden Ebenen die access_cl neu erstellt
+  // werden, die durch Neuladen des channeld verloren gingen, auch wenn die
+  // Ebenen im MEMORY lagen.
+  foreach(string chname, struct channel_s ch : channels)
+  {
+    if (ch.access_cl || !assert_supervisor(ch))
+      continue;
+    ch.access_cl = symbol_function("ch_check_access", ch.supervisor);
+  }
+
   // <MasteR>-Ebene betreten, damit der channeld auf seine Kommandos auf
   // dieser Ebene reagieren kann.
   this_object()->join(CMNAME, this_object());