From e97722e495495468ef8a3c5e12d7080738a99841 Mon Sep 17 00:00:00 2001
From: unknown <guilhem@mysql.com>
Date: Tue, 16 Dec 2003 11:10:50 +0100
Subject: Fix for BUG#2083 "EE_ error codes (EE_DELETE, EE_WRITE) end up in the
 binlog, making slave stop". The problem was that during execution of the
 command on the master, an error can occur (for example, not space left on
 device, then mysqld waits and when there is space it completes successfully:
 so finally it worked but the error EE_WRITE remains in thd->net.last_errno
 and thd->net.last_error). To know if finally the command succeeded, we test
 the 'error' variable in every place, and if it shows no failure we reset
 thd->net.last_err* using the function THD::clear_error() which is backported
 from 4.1. A new test to see if now only real errors get to the binlog (note:
 the test uses "rm").

Also a bit of memory free/alloc saving in log_event.cc (do not free the whole
mem_root after every query in the slave SQL thread: we can keep the initial
block of it; which will be freed when the thread terminates).


sql/log_event.cc:
  In the slave SQL thread, it's a waste to free the initial block of the mem_root
  after every query. We can instead keep it. It will be freed when the thread
  terminates (in THD::~THD()).
sql/sql_acl.cc:
  clear the error in thd->net.last_errno as there was no error
sql/sql_base.cc:
  clear the error in thd->net.last_errno as there was no error
sql/sql_class.h:
  Backport of THD::clear_error() from 4.1:
  clears the error in thd->net.last_errno
sql/sql_db.cc:
  clear the error in thd->net.last_errno as there was no error
sql/sql_delete.cc:
  clear the error in thd->net.last_errno as there was no error
sql/sql_insert.cc:
  clear the error in thd->net.last_errno as there was no error
sql/sql_parse.cc:
  clear the error in thd->net.last_errno as there was no error
sql/sql_rename.cc:
  clear the error in thd->net.last_errno as there was no error
sql/sql_table.cc:
  clear the error in thd->net.last_errno as there was no error
sql/sql_update.cc:
  clear the error in thd->net.last_errno as there was no error
---
 sql/sql_base.cc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'sql/sql_base.cc')

diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index e4694adb9a2..cf42109fb9a 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -575,8 +575,8 @@ void close_temporary_tables(THD *thd)
   if (query && found_user_tables && mysql_bin_log.is_open())
   {
     /* The -1 is to remove last ',' */
+    thd->clear_error();
     Query_log_event qinfo(thd, query, (ulong)(end-query)-1, 0);
-    qinfo.error_code=0;
     mysql_bin_log.write(&qinfo);
   }
   thd->temporary_tables=0;
-- 
cgit v1.2.1