src__cmd__ksh93__sh__array.c.diff   [plain text]


--- src/cmd/ksh93/sh/array.c~	2012-06-06 15:00:42.000000000 -0700
+++ src/cmd/ksh93/sh/array.c	2014-02-08 18:25:11.000000000 -0800
@@ -682,8 +682,10 @@ static void array_putval(Namval_t *np, c
 			{
 				if(is_associative(ap))
 					(*ap->fun)(np, NIL(char*), NV_AFREE);
-				else if(ap->table)
+				else if(ap->table) {
 					dtclose(ap->table);
+					ap->table = 0;
+				}
 				nv_offattr(np,NV_ARRAY);
 			}
 			if(!mp || mp!=np || is_associative(ap))
@@ -1700,8 +1702,10 @@ void *nv_associative(register Namval_t *
 			dtclose(ap->header.scope);
 			ap->header.scope = 0;
 		}
-		else
+		else {
 			dtclose(ap->header.table);
+			ap->header.table = 0;
+		}
 		return((void*)ap);
 	    case NV_ANEXT:
 		if(!ap->pos)