diff --git c/gdb/testsuite/gdb.base/gdbhistsize-history.exp w/gdb/testsuite/gdb.base/gdbhistsize-history.exp
index 0c3f93f..75d98e1 100644
--- c/gdb/testsuite/gdb.base/gdbhistsize-history.exp
+++ w/gdb/testsuite/gdb.base/gdbhistsize-history.exp
@@ -24,11 +24,7 @@
 proc test_histsize_history_setting { histsize size { env_var "GDBHISTSIZE" } } {
     global env
 
-    set have_old_gdbhistsize 0
-    if [info exists env($env_var)] {
-        set have_old_gdbhistsize 1
-        set old_gdbhistsize $env($env_var)
-    }
+    save_vars { env($env_var) } {
 	set env($env_var) $histsize
 
 	with_test_prefix "histsize=$histsize" {
@@ -43,11 +39,6 @@ proc test_histsize_history_setting { histsize size { env_var "GDBHISTSIZE" } } {
 		gdb_test "show commands" \
 		         "    .  show history size\r\n    .  show commands"
 	    }
-
-	if { $have_old_gdbhistsize } {
-	    set env($env_var) $old_gdbhistsize
-	} else {
-	    unset env($env_var)
         }
     }
 }
diff --git c/gdb/testsuite/gdb.base/gdbinit-history.exp w/gdb/testsuite/gdb.base/gdbinit-history.exp
index 85177f3..85ef12f 100644
--- c/gdb/testsuite/gdb.base/gdbinit-history.exp
+++ w/gdb/testsuite/gdb.base/gdbinit-history.exp
@@ -28,8 +28,7 @@ proc test_gdbinit_history_setting { home size { gdbhistsize_val "-" } } {
     global srcdir
     global subdir
 
-    array set old_env [array get env]
-
+    save_vars { INTERNAL_GDBFLAGS env(GDBHISTSIZE) env(HOME) } {
 	set env(HOME) "$srcdir/$subdir/$home"
 
 	# The GDBHISTSIZE environment variable takes precedence over whatever
@@ -41,7 +40,6 @@ proc test_gdbinit_history_setting { home size { gdbhistsize_val "-" } } {
 	    set env(GDBHISTSIZE) $gdbhistsize_val
 	}
 
-    set saved_internal_gdbflags $INTERNAL_GDBFLAGS
 	set INTERNAL_GDBFLAGS [string map {"-nx" ""} $INTERNAL_GDBFLAGS]
 
 	set prefix "home=$home"
@@ -61,11 +59,7 @@ proc test_gdbinit_history_setting { home size { gdbhistsize_val "-" } } {
 		gdb_test "show commands" "    .  show history size\r\n    .  show commands"
 	    }
 	}
-
-    set INTERNAL_GDBFLAGS $saved_internal_gdbflags
-
-    unset -nocomplain env(GDBHISTSIZE)
-    array set env [array get old_env]
+    }
 }
 
 # Check that the history file does not get truncated to zero when a gdbinit
@@ -75,15 +69,12 @@ proc test_no_truncation_of_unlimited_history_file { } {
     global env
     global INTERNAL_GDBFLAGS
 
-    array set old_env [array get env]
-
+    save_vars { INTERNAL_GDBFLAGS env(GDBHISTSIZE) } {
 	# The GDBHISTSIZE environment variable takes precedence over whatever
 	# history size is set in .gdbinit.  Make sure the former is not
 	# set.
 	unset -nocomplain env(GDBHISTSIZE)
 
-    set saved_internal_gdbflags $INTERNAL_GDBFLAGS
-
 	set temp_gdbinit [standard_output_file "gdbinit-history.gdbinit"]
 	set temp_histfile [standard_output_file "gdbinit-history.gdb_history"]
 	file delete $temp_gdbinit
@@ -118,10 +109,7 @@ proc test_no_truncation_of_unlimited_history_file { } {
 		gdb_test "server show commands" "    .  print 1.*"
 	    }
         }
-
-    set INTERNAL_GDBFLAGS $saved_internal_gdbflags
-
-    array set env [array get old_env]
+    }
 }
 
 test_gdbinit_history_setting "gdbinit-history/unlimited" "unlimited"
diff --git c/gdb/testsuite/gdb.base/readline.exp w/gdb/testsuite/gdb.base/readline.exp
index f0490a2..a605c80 100644
--- c/gdb/testsuite/gdb.base/readline.exp
+++ w/gdb/testsuite/gdb.base/readline.exp
@@ -150,10 +150,9 @@ if { ![readline_is_used] } {
     return -1
 }
 
-set oldtimeout1 $timeout
+save_vars { timeout env(GDBHISTSIZE) env(GDBHISTFILE) } {
     set timeout 30
 
-
     # A simple test of operate-and-get-next.
     operate_and_get_next "Simple operate-and-get-next" \
       "p 1" ".* = 1" \
@@ -182,12 +181,6 @@ gdb_test_multiple "if 1 > 0\n\033\[A\033\[A\nend" $msg {
     # Now repeat the first test with a history file that fills the entire
     # history list.
 
-if [info exists env(GDBHISTFILE)] {
-    set old_gdbhistfile $env(GDBHISTFILE)
-}
-if [info exists env(GDBHISTSIZE)] {
-    set old_gdbhistsize $env(GDBHISTSIZE)
-}
     set env(GDBHISTFILE) "${srcdir}/${subdir}/gdb_history"
     set env(GDBHISTSIZE) "10"
 
@@ -199,19 +192,6 @@ operate_and_get_next "Simple operate-and-get-next" \
       "p 7" ".* = 7" \
       "p 8" ".* = 8" \
       "p 9" ".* = 9"
-
-
-# Restore globals modified in this test...
-if [info exists old_gdbhistfile] {
-    set env(GDBHISTFILE) $old_gdbhistfile
-} else {
-    unset env(GDBHISTFILE)
-}
-if [info exists old_gdbhistsize] {
-    set env(GDBHISTSIZE) $old_gdbhistsize
-} else {
-    unset env(GDBHISTSIZE)
 }
-set timeout $oldtimeout1
 
 return 0
