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