Workaround fuer Driver-Speicherleck

Der Driver schliesst das iconv-Handle in in 3.6.2 und
3.6.3 nicht beim Ausloggen oder Zerstoeren von
Interactives. Daher in disconnect() und prepare_destruct()
das Encoding wechseln. Dabei schliesst der driver das Handle
auf iconv schliesst.

Change-Id: I96a2dbda9a48066c096b103ba68b216d99933b2e
diff --git a/secure/master.c b/secure/master.c
index b853771..f9f40a1 100644
--- a/secure/master.c
+++ b/secure/master.c
@@ -593,7 +593,15 @@
 
 // Was machen bei disconnect?
 protected void disconnect(object who, string remaining) {
-    ({void})who->NetDead(); return;
+#if (__VERSION_MICRO__*100 + __VERSION_MINOR__ *10000 + __VERSION_MAJOR__ \
+     * 1000000) <= 3060300
+  // Workaround fuer Driver-Speicherleck in 3.6.2 und 3.6.3: vor dem
+  // Disconnect das Encoding wechseln, damit der driver das Handle auf iconv
+  // schliesst.
+  configure_interactive(who, IC_ENCODING, "UTF-8");
+#endif
+  ({void})who->NetDead();
+  return;
 }
 
 // Es gibt kein File 'filename'. VC aktivieren so vorhanden ...
diff --git a/secure/master/destruct.c b/secure/master/destruct.c
index bd36571..22581b1 100644
--- a/secure/master/destruct.c
+++ b/secure/master/destruct.c
@@ -68,7 +68,16 @@
       return sprintf("%O verweigert die Zerstoerung mittels destruct(). "
           "Fehlende Rechte von %O?\n",ob, previous_object());
   }
-  
+
+#if (__VERSION_MICRO__*100 + __VERSION_MINOR__ *10000 + __VERSION_MAJOR__ \
+     * 1000000) <= 3060300
+  // Workaround fuer Driver-Speicherleck in 3.6.2 und 3.6.3: vor dem
+  // Zerstoeren das Encoding wechseln, damit der driver das Handle auf iconv
+  // schliesst.
+  if(interactive(ob))
+    configure_interactive(ob, IC_ENCODING, "UTF-8");
+#endif
+
   env = environment(ob);
 
   // Objekt hat kein Env: Alles zerstoeren, Spieler ins Void