Neuen SV zuweisen, wenn alter unbekannt.

assert_supervisor() war noch nicht ganz vollstaendig
und hat nur versucht, den alten SV neuzuladen, wenn
dessen Pfad bekannt war.
Im anderen Falle wird nun ein neuer SV bestimmt.

Change-Id: Id84cd88c34fdc5960f80c6aed3257279993b4a2a
diff --git a/p/daemon/channeld.c b/p/daemon/channeld.c
index fd8776d..85ff52e 100644
--- a/p/daemon/channeld.c
+++ b/p/daemon/channeld.c
@@ -667,6 +667,8 @@
 private int assert_supervisor(string ch)
 {
   // Es ist keine Closure vorhanden, d.h. der Ebenenbesitzer wurde zerstoert.
+  //TODO: es ist nicht so selten, dass die Closure 0 ist, d.h. der Code laeuft
+  //haeufig unnoetig!
   if (!closurep(ACC_CLOSURE(ch)))
   {
     // Wenn der Ebenenbesitzer als String eingetragen ist, versuchen wir,
@@ -695,19 +697,26 @@
       }
       else
       {
-        log_file("CHANNEL", sprintf("[%s] Channel deleted. %O -> %O\n",
-                  dtime(time()), SVISOR_OB(ch), err));
+        log_file("CHANNEL",
+            sprintf("[%s] Channel %s deleted. SV-Fehler: %O -> %O\n",
+                  dtime(time()), ch, SVISOR_OB(ch), err));
         m_delete(channels, ch);
         return 0;
       }
     }
-    else
+    else if (!objectp(SVISOR_OB(ch)))
     {
       // In diesem Fall muss ein neues SV-Objekt gesucht und ggf. eingetragen
-      // werden. Wir nehmen das aelteste Mitglied der Ebene.
-      // TODO: kaputte Objekte raussortieren, neuen Master bestimmen, wenn
-      // dieser nicht mehr existiert.
-
+      // werden. change_sv_object nimmt das aelteste Mitglied der Ebene.
+      if (!change_sv_object(ch, pl, 0))
+      {
+        // wenn das nicht klappt, Ebene aufloesen
+        log_file("CHANNEL",
+            sprintf("[%s] Deleting channel %s without SV.\n",
+                  dtime(time()), ch));
+        m_delete(channels, ch);
+        return 0;
+      }
     }
   }
   return 1;
@@ -840,7 +849,7 @@
 
   // Erstellen neuer Ebenen loggen, wenn wir nicht selbst der Ersteller sind.
   if (owner != this_object())
-    log_file("CHANNEL.new", sprintf("[%s] %O: %O %O\n",
+    log_file("CHANNEL.new", sprintf("[%s] Neue Ebene %s: %O %O\n",
         dtime(time()), ch_name, owner, info));
 
   // Erfolgsmeldung ausgeben, ausser bei unsichtbarem Ebenenbesitzer.