diff --git a/ecrire/inc/meta.php b/ecrire/inc/meta.php
index 60449d1b71d7a77343a66e3a422e2bb203067d62..f92dd8d1549e6de0c9f5aa316ff26857e1f95eb1 100644
--- a/ecrire/inc/meta.php
+++ b/ecrire/inc/meta.php
@@ -64,6 +64,7 @@ function lire_metas($table='meta') {
 		$GLOBALS[$table] = array();
 		while ($row = sql_fetch($result))
 			$GLOBALS[$table][$row['nom']] = $row['valeur'];
+        sql_free($result);
 
 		if (!$GLOBALS[$table]['charset']
 		  OR $GLOBALS[$table]['charset']=='_DEFAULT_CHARSET' // hum, correction d'un bug ayant abime quelques install
@@ -128,18 +129,21 @@ function ecrire_meta($nom, $valeur, $importable = NULL, $table='meta') {
 		$GLOBALS[$table][$nom] = $valeur;
 		return;
 	}
-	$res = sql_fetch($res);
+	$row = sql_fetch($res);
+    sql_free($res);
+
 	// ne pas invalider le cache si affectation a l'identique
 	// (tant pis si impt aurait du changer)
-	if ($res AND $valeur == $res['valeur'] AND $GLOBALS[$table][$nom] == $valeur) return;
+	if ($row AND $valeur == $row['valeur'] AND $GLOBALS[$table][$nom] == $valeur) return;
+
 	$GLOBALS[$table][$nom] = $valeur;
 	// cf effacer pour comprendre le double touch
 	$antidate = time() - (_META_CACHE_TIME<<1);
 	if (!isset($touch[$table])) {touch_meta($antidate, $table);}
 	$r = array('nom' => $nom, 'valeur' => $valeur);
 	// Gaffe aux tables sans impt (vieilles versions de SPIP notamment)
-	if ($importable AND isset($res['impt'])) $r['impt'] = $importable;
-	if ($res) {
+	if ($importable AND isset($row['impt'])) $r['impt'] = $importable;
+	if ($row) {
 		sql_updateq('spip_' . $table, $r,"nom=" . sql_quote($nom));
 	} else {
 		sql_insertq('spip_' . $table, $r);