diff --git a/Docs/manual.texi b/Docs/manual.texi
index 5e295f4bbc8990f8e360cbd83ffeead9d14f09c7..2bac7dab66e431d73f18ab6b21c482d2aec2b4f6 100644
--- a/Docs/manual.texi
+++ b/Docs/manual.texi
@@ -40713,6 +40713,9 @@ not yet 100 % confident in this code.
 @appendixsubsec Changes in release 3.23.32
 @itemize @bullet
 @item
+Changed code to get around compiler bug in Compaq C++ on OSF1, that broke
+@code{BACKUP, RESTORE, CHECK, REPAIR, and ANALYZE TABLE}.
+@item
 Added option @code{FULL} to @code{SHOW COLUMNS}. Now we only show the
 privilege list for the columns if this option is given.
 @item
diff --git a/client/mysqladmin.c b/client/mysqladmin.c
index 35f7f3412479f82b0fbc6f72b0faec046f44f637..2a9d47edf446c0ac7fede1fdc4d71e0997f3d78f 100644
--- a/client/mysqladmin.c
+++ b/client/mysqladmin.c
@@ -28,7 +28,7 @@
 #include <my_pthread.h>				/* because of signal()	*/
 #endif
 
-#define ADMIN_VERSION "8.13"
+#define ADMIN_VERSION "8.14"
 #define MAX_MYSQL_VAR 64
 #define MAX_TIME_TO_WAIT 3600			/* Wait for shutdown */
 #define MAX_TRUNC_LENGTH 3
@@ -37,9 +37,9 @@ char truncated_var_names[MAX_MYSQL_VAR][MAX_TRUNC_LENGTH];
 char ex_var_names[MAX_MYSQL_VAR][FN_REFLEN];
 ulonglong last_values[MAX_MYSQL_VAR];
 static int interval=0;
-static my_bool option_force=0,interrupted=0,new_line=0,option_silent=0,
+static my_bool option_force=0,interrupted=0,new_line=0,
                opt_compress=0, opt_relative=0, opt_verbose=0, opt_vertical=0;
-static uint tcp_port = 0, option_wait = 0;
+static uint tcp_port = 0, option_wait = 0, option_silent=0;
 static ulong opt_connect_timeout;
 static my_string unix_port=0;
 
@@ -201,7 +201,7 @@ int main(int argc,char *argv[])
       }
       break;
     case 's':
-      option_silent = 1;
+      option_silent++;
       break;
     case 'S':
       unix_port= optarg;
@@ -367,21 +367,22 @@ static my_bool sql_connect(MYSQL *mysql,const char *host, const char *user,
       fprintf(stderr,"Got error: %s\n", mysql_error(mysql));
       if (!option_force)
 	return 1;
-      sleep(5);
     }
-    else if (!info)
+    else if (!option_silent)
     {
-      info=1;
-      fputs("Waiting for MySQL server to answer",stderr);
-      (void) fflush(stderr);
-      sleep(5);
-    }
-    else
-    {
-      putc('.',stderr); 
-      (void) fflush(stderr);
-      sleep(5);
+      if (!info)
+      {
+	info=1;
+	fputs("Waiting for MySQL server to answer",stderr);
+	(void) fflush(stderr);
+      }
+      else
+      {
+	putc('.',stderr); 
+	(void) fflush(stderr);
+      }
     }
+    sleep(5);
   }
 }
 
@@ -739,7 +740,10 @@ static my_bool execute_commands(MYSQL *mysql,int argc, char **argv)
     case ADMIN_PING:
       mysql->reconnect=0;	/* We want to know of reconnects */
       if (!mysql_ping(mysql))
-        puts("mysqld is alive");
+      {
+	if (option_silent < 2)
+	  puts("mysqld is alive");
+      }
       else
       {
 	if (mysql_errno(mysql) == CR_SERVER_GONE_ERROR)
diff --git a/include/my_pthread.h b/include/my_pthread.h
index 6a5b8dcf5eb52a4f2e2714a92ad85d6047d8d827..c8d0d2c9d0afaa179eb7ea4f9de206c364060a38 100644
--- a/include/my_pthread.h
+++ b/include/my_pthread.h
@@ -433,6 +433,8 @@ int safe_cond_timedwait(pthread_cond_t *cond, safe_mutex_t *mp,
 #undef pthread_mutex_wait
 #undef pthread_mutex_timedwait
 #undef pthread_mutex_t
+#undef pthread_cond_wait
+#undef pthread_cond_timedwait
 #define pthread_mutex_init(A,B) safe_mutex_init((A),(B))
 #define pthread_mutex_lock(A) safe_mutex_lock((A),__FILE__,__LINE__)
 #define pthread_mutex_unlock(A) safe_mutex_unlock((A),__FILE__,__LINE__)
diff --git a/mysql-test/install_test_db.sh b/mysql-test/install_test_db.sh
index 3ee2aa42fad2f4a1d3f47c5f7e95b607520c281d..e59b87cbe1ceecf66839334e4861a589496699b6 100644
--- a/mysql-test/install_test_db.sh
+++ b/mysql-test/install_test_db.sh
@@ -43,8 +43,6 @@ PATH=$PATH:/usr/bsd
 hostname=`hostname`		# Install this too in the user table
 hostname="$hostname%"		# Fix if not fully qualified hostname
 
-resolved=127.0.0.1
-
 
 #create the directories
 [ -d $vardir ] || mkdir $vardir
@@ -144,9 +142,7 @@ then
 
   i_u="INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
   INSERT INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
-  
-  REPLACE INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
-  REPLACE INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
+  REPLACE INTO user VALUES ('127.0.0.1','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
   
   INSERT INTO user VALUES ('localhost','','','N','N','N','N','N','N','N','N','N','N','N','N','N','N');
   INSERT INTO user VALUES ('$hostname','','','N','N','N','N','N','N','N','N','N','N','N','N','N','N');"
diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh
index c49a6e0bedf7a0d964183559edaa5402c22cdb8e..a63e909d823efe5060a234705eea97a6489ec1a3 100644
--- a/mysql-test/mysql-test-run.sh
+++ b/mysql-test/mysql-test-run.sh
@@ -35,6 +35,7 @@ RM=rm
 TIME=time
 TR=tr
 XARGS=`which xargs | head -1`
+SED=sed
 
 # Are we using a source or a binary distribution?
 
@@ -72,7 +73,7 @@ BASEDIR=`pwd`
 cd $CWD
 MYSQL_TEST_DIR=$BASEDIR/mysql-test
 STD_DATA=$MYSQL_TEST_DIR/std_data
-SED=sed
+hostname=`hostname`		# Installed in the mysql privilege table
   
 TESTDIR="$MYSQL_TEST_DIR/t/"
 TESTSUFFIX=test
@@ -238,10 +239,9 @@ SLAVE_MYSQLD=$MYSQLD #this can be changed later if we are doing gcov
 # Function Definitions
 #--
 wait_for_server_start ()
- {
-   $MYSQL --no-defaults -u $DBUSER -e "select 1" --silent -w1 --host=127.0.0.1 --port=$1 \
-    >/dev/null
- }
+{
+   $MYSQLADMIN --no-defaults -u $DBUSER --silent -w2 --host=$hostname --port=$1  ping >/dev/null
+}
 
 prompt_user ()
 {
diff --git a/mysql-test/r/rpl000015.result b/mysql-test/r/rpl000015.result
index 45abae3976ec3dc11dea0d7dfec8bdc03bb0f747..59a1a21be174f06ad39dfc1f2b3758bf6f947935 100644
--- a/mysql-test/r/rpl000015.result
+++ b/mysql-test/r/rpl000015.result
@@ -7,7 +7,7 @@ Master_Host	Master_User	Master_Port	Connect_retry	Log_File	Pos	Slave_Running	Rep
 Master_Host	Master_User	Master_Port	Connect_retry	Log_File	Pos	Slave_Running	Replicate_do_db	Replicate_ignore_db
 127.0.0.1	root	9306	60		4	No		
 Master_Host	Master_User	Master_Port	Connect_retry	Log_File	Pos	Slave_Running	Replicate_do_db	Replicate_ignore_db
-127.0.0.1	root	9306	60		4	Yes		
+127.0.0.1	root	9306	60	master-bin.001	73	Yes		
 n
 10
 45
diff --git a/mysql-test/t/rpl000015.test b/mysql-test/t/rpl000015.test
index b51a77ec8731840e0eeb450f75df289b780dd235..db5b3c720b27ef91ee0f42909b483462a6bcdb71 100644
--- a/mysql-test/t/rpl000015.test
+++ b/mysql-test/t/rpl000015.test
@@ -13,6 +13,7 @@ change master to master_host='127.0.0.1',master_user='root',
  master_password='',master_port=9306;
 show slave status;
 slave start;
+sleep 3;
 show slave status;
 connection master;
 drop table if exists foo;
diff --git a/mysql-test/t/rpl000016.test b/mysql-test/t/rpl000016.test
index 1a75da490394954daf226374cbf31bc9226ef885..e5f1649a504b2dc65609a0b931c156d0fb88a7fb 100644
--- a/mysql-test/t/rpl000016.test
+++ b/mysql-test/t/rpl000016.test
@@ -27,6 +27,7 @@ create table t2(m int);
 insert into t2 values (34),(67),(123);
 flush logs;
 show master logs;
+sleep 2; # If a slow machine
 purge master logs to 'master-bin.003';
 show master logs;
 insert into t2 values (65);
diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc
index 63cb378a1b99a0d11bc752e542cc75c744fb01df..f4564c025e008549ead431707dd17ef2c0e7cf54 100644
--- a/sql/sql_repl.cc
+++ b/sql/sql_repl.cc
@@ -408,6 +408,7 @@ sweepstakes if you report the bug";
 	  // slave
 	  break;
 	case LOG_READ_EOF:
+	  DBUG_PRINT("wait",("waiting for data on binary log"));
 	  pthread_cond_wait(&COND_binlog_update, log_lock);
 	  break;
 
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 68d2ab062c68c71e78c971ff85da777361cae7ef..3e1a0eb9fa10fa6888bd369ced2794e803bfef3e 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -799,74 +799,76 @@ static int send_check_errmsg(THD* thd, TABLE_LIST* table,
 static int prepare_for_restore(THD* thd, TABLE_LIST* table)
 {
   String *packet = &thd->packet;
+  DBUG_ENTER("prepare_for_restore");
 
-  if(table->table) // do not overwrite existing tables on restore
-    {
-      return send_check_errmsg(thd, table, "restore",
-			       "table exists, will not overwrite on restore"
-			       );
-    }
+  if (table->table) // do not overwrite existing tables on restore
+  {
+    DBUG_RETURN(send_check_errmsg(thd, table, "restore",
+				  "table exists, will not overwrite on restore"
+				  ));
+  }
   else
-    {
-      char* backup_dir = thd->lex.backup_dir;
-      char src_path[FN_REFLEN], dst_path[FN_REFLEN];
-      char* table_name = table->name;
-      char* db = thd->db ? thd->db : table->db;
-
-      if(!fn_format(src_path, table_name, backup_dir, reg_ext, 4 + 64))
-	return -1; // protect buffer overflow
+  {
+    char* backup_dir = thd->lex.backup_dir;
+    char src_path[FN_REFLEN], dst_path[FN_REFLEN];
+    char* table_name = table->name;
+    char* db = thd->db ? thd->db : table->db;
 
-      sprintf(dst_path, "%s/%s/%s", mysql_real_data_home, db, table_name);
+    if (!fn_format(src_path, table_name, backup_dir, reg_ext, 4 + 64))
+      DBUG_RETURN(-1); // protect buffer overflow
 
-      int lock_retcode;
-      pthread_mutex_lock(&LOCK_open);
-      if((lock_retcode = lock_table_name(thd, table)) < 0)
-	{
-	  pthread_mutex_unlock(&LOCK_open);
-	  return -1;
-	}
+    sprintf(dst_path, "%s/%s/%s", mysql_real_data_home, db, table_name);
 
-      if(lock_retcode && wait_for_locked_table_names(thd, table))
-	{
-	  unlock_table_name(thd, table);
-          pthread_mutex_unlock(&LOCK_open);
-	  return -1;
-	}
+    int lock_retcode;
+    pthread_mutex_lock(&LOCK_open);
+    if((lock_retcode = lock_table_name(thd, table)) < 0)
+    {
       pthread_mutex_unlock(&LOCK_open);
+      DBUG_RETURN(-1);
+    }
 
-      if(my_copy(src_path,
-		 fn_format(dst_path, dst_path,"",
-			   reg_ext, 4),
-		 MYF(MY_WME)))
-	{
- 	   unlock_table_name(thd, table);
-           return send_check_errmsg(thd, table, "restore",
-				    "Failed copying .frm file");
-	}
-      bool save_no_send_ok = thd->net.no_send_ok;
-      thd->net.no_send_ok = 1;
-      // generate table will try to send OK which messes up the output
-      // for the client
+    if(lock_retcode && wait_for_locked_table_names(thd, table))
+    {
+      unlock_table_name(thd, table);
+      pthread_mutex_unlock(&LOCK_open);
+      DBUG_RETURN(-1);
+    }
+    pthread_mutex_unlock(&LOCK_open);
 
-      if(generate_table(thd, table, 0))
-	{
-	  unlock_table_name(thd, table);
-          thd->net.no_send_ok = save_no_send_ok;
-          return send_check_errmsg(thd, table, "restore",
-				    "Failed generating table from .frm file");
-	}
+    if(my_copy(src_path,
+	       fn_format(dst_path, dst_path,"",
+			 reg_ext, 4),
+	       MYF(MY_WME)))
+    {
+      unlock_table_name(thd, table);
+      DBUG_RETURN(send_check_errmsg(thd, table, "restore",
+				    "Failed copying .frm file"));
+    }
+    bool save_no_send_ok = thd->net.no_send_ok;
+    thd->net.no_send_ok = 1;
+    // generate table will try to send OK which messes up the output
+    // for the client
 
+    if(generate_table(thd, table, 0))
+    {
+      unlock_table_name(thd, table);
       thd->net.no_send_ok = save_no_send_ok;
+      DBUG_RETURN(send_check_errmsg(thd, table, "restore",
+				    "Failed generating table from .frm file"));
     }
 
-  return 0;
+    thd->net.no_send_ok = save_no_send_ok;
+  }
+
+  DBUG_RETURN(0);
 }
 
 static int mysql_admin_table(THD* thd, TABLE_LIST* tables,
 			     HA_CHECK_OPT* check_opt,
-			     thr_lock_type lock_type,
-			     bool open_for_modify,
 			     const char *operator_name,
+			     thr_lock_type lock_type,
+			     bool open_for_modify, bool restore,
+			     uint extra_open_options,
 			     int (handler::*operator_func)
 			     (THD *, HA_CHECK_OPT *))
 {
@@ -894,12 +896,11 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables,
     bool fatal_error=0;
     strxmov(table_name,db ? db : "",".",table->name,NullS);
 
-    if (operator_func == &handler::repair || operator_func == &handler::check)
-      thd->open_options|= HA_OPEN_FOR_REPAIR;
+    thd->open_options|= extra_open_options;
     table->table = open_ltable(thd, table, lock_type);
-    thd->open_options&= ~HA_OPEN_FOR_REPAIR;
+    thd->open_options&= ~extra_open_options;
     packet->length(0);
-    if (operator_func == &handler::restore)
+    if (restore)
     {
       switch (prepare_for_restore(thd, table)) {
       case 1: continue; // error, message written to net
@@ -1023,16 +1024,14 @@ int mysql_backup_table(THD* thd, TABLE_LIST* table_list)
 {
   DBUG_ENTER("mysql_backup_table");
   DBUG_RETURN(mysql_admin_table(thd, table_list, 0,
-				TL_READ, 1,
-				"backup",
+				"backup", TL_READ, 1, 0, 0,
 				&handler::backup));
 }
 int mysql_restore_table(THD* thd, TABLE_LIST* table_list)
 {
   DBUG_ENTER("mysql_restore_table");
   DBUG_RETURN(mysql_admin_table(thd, table_list, 0,
-				TL_WRITE, 1,
-				"restore",
+				"restore", TL_WRITE, 1, 1,0,
 				&handler::restore));
 }
 
@@ -1040,8 +1039,7 @@ int mysql_repair_table(THD* thd, TABLE_LIST* tables, HA_CHECK_OPT* check_opt)
 {
   DBUG_ENTER("mysql_repair_table");
   DBUG_RETURN(mysql_admin_table(thd, tables, check_opt,
-				TL_WRITE, 1,
-				"repair",
+				"repair", TL_WRITE, 1, 0, HA_OPEN_FOR_REPAIR,
 				&handler::repair));
 }
 
@@ -1049,8 +1047,7 @@ int mysql_optimize_table(THD* thd, TABLE_LIST* tables, HA_CHECK_OPT* check_opt)
 {
   DBUG_ENTER("mysql_optimize_table");
   DBUG_RETURN(mysql_admin_table(thd, tables, check_opt,
-				TL_WRITE, 1,
-				"optimize",
+				"optimize", TL_WRITE, 1,0,0,
 				&handler::optimize));
 }
 
@@ -1059,8 +1056,7 @@ int mysql_analyze_table(THD* thd, TABLE_LIST* tables, HA_CHECK_OPT* check_opt)
 {
   DBUG_ENTER("mysql_analyze_table");
   DBUG_RETURN(mysql_admin_table(thd, tables, check_opt,
-				TL_READ_NO_INSERT, 1,
-				"analyze",
+				"analyze",TL_READ_NO_INSERT, 1,0,0,
 				&handler::analyze));
 }
 
@@ -1069,8 +1065,8 @@ int mysql_check_table(THD* thd, TABLE_LIST* tables,HA_CHECK_OPT* check_opt)
 {
   DBUG_ENTER("mysql_check_table");
   DBUG_RETURN(mysql_admin_table(thd, tables, check_opt,
-				TL_READ_NO_INSERT, 0,
 				"check",
+				TL_READ_NO_INSERT, 0, 0, HA_OPEN_FOR_REPAIR,
 				&handler::check));
 }