List:Commits« Previous MessageNext Message »
From:Marc Alff Date:September 17 2010 4:21pm
Subject:bzr commit into mysql-5.5-bugfixing branch (marc.alff:3209)
View as plain text  
#At file:///home/malff/BZR_TREE/mysql-5.5-bugfixing-56832/ based on revid:marc.alff@stripped

 3209 Marc Alff	2010-09-17 [merge]
      local merge

    modified:
      sql/log.cc
      sql/log.h
      sql/sql_repl.cc
=== modified file 'sql/log.cc'
--- a/sql/log.cc	2010-08-30 08:36:02 +0000
+++ b/sql/log.cc	2010-09-06 17:18:44 +0000
@@ -5284,11 +5284,8 @@ int MYSQL_BIN_LOG::wait_for_update_bin_l
                                            const struct timespec *timeout)
 {
   int ret= 0;
-  const char* old_msg = thd->proc_info;
   DBUG_ENTER("wait_for_update_bin_log");
-  old_msg= thd->enter_cond(&update_cond, &LOCK_log,
-                           "Master has sent all binlog to slave; "
-                           "waiting for binlog to be updated");
+
   if (!timeout)
     mysql_cond_wait(&update_cond, &LOCK_log);
   else

=== modified file 'sql/log.h'
--- a/sql/log.h	2010-08-20 11:22:46 +0000
+++ b/sql/log.h	2010-09-06 17:18:44 +0000
@@ -460,6 +460,7 @@ public:
   inline char* get_log_fname() { return log_file_name; }
   inline char* get_name() { return name; }
   inline mysql_mutex_t* get_log_lock() { return &LOCK_log; }
+  inline mysql_cond_t* get_log_cond() { return &update_cond; }
   inline IO_CACHE* get_log_file() { return &log_file; }
 
   inline void lock_index() { mysql_mutex_lock(&LOCK_index);}

=== modified file 'sql/sql_repl.cc'
--- a/sql/sql_repl.cc	2010-07-26 10:52:59 +0000
+++ b/sql/sql_repl.cc	2010-09-06 17:18:44 +0000
@@ -448,6 +448,8 @@ void mysql_binlog_send(THD* thd, char* l
   const char *errmsg = "Unknown error";
   NET* net = &thd->net;
   mysql_mutex_t *log_lock;
+  mysql_cond_t *log_cond;
+
   bool binlog_can_be_corrupted= FALSE;
 #ifndef DBUG_OFF
   int left_events = max_binlog_dump_events;
@@ -591,7 +593,8 @@ impossible position";
     mysql_bin_log, and it's already inited, and it will be destroyed
     only at shutdown).
   */
-  log_lock = mysql_bin_log.get_log_lock();
+  log_lock= mysql_bin_log.get_log_lock();
+  log_cond= mysql_bin_log.get_log_cond();
   if (pos > BIN_LOG_HEADER_SIZE)
   {
     /* reset transmit packet for the event read from binary log
@@ -826,6 +829,7 @@ impossible position";
 #ifndef DBUG_OFF
           ulong hb_info_counter= 0;
 #endif
+          const char* old_msg= thd->proc_info;
           signal_cnt= mysql_bin_log.signal_cnt;
           do 
           {
@@ -834,6 +838,9 @@ impossible position";
               DBUG_ASSERT(heartbeat_ts && heartbeat_period != 0);
               set_timespec_nsec(*heartbeat_ts, heartbeat_period);
             }
+            thd->enter_cond(log_cond, log_lock,
+                            "Master has sent all binlog to slave; "
+                            "waiting for binlog to be updated");
             ret= mysql_bin_log.wait_for_update_bin_log(thd, heartbeat_ts);
             DBUG_ASSERT(ret == 0 || (heartbeat_period != 0 && coord != NULL));
             if (ret == ETIMEDOUT || ret == ETIME)
@@ -849,12 +856,15 @@ impossible position";
 #endif
               /* reset transmit packet for the heartbeat event */
               if (reset_transmit_packet(thd, flags, &ev_offset, &errmsg))
+              {
+                thd->exit_cond(old_msg);
                 goto err;
+              }
               if (send_heartbeat_event(net, packet, coord))
               {
                 errmsg = "Failed on my_net_write()";
                 my_errno= ER_UNKNOWN_ERROR;
-                mysql_mutex_unlock(log_lock);
+                thd->exit_cond(old_msg);
                 goto err;
               }
             }
@@ -863,7 +873,7 @@ impossible position";
               DBUG_PRINT("wait",("binary log received update or a broadcast signal caught"));
             }
           } while (signal_cnt == mysql_bin_log.signal_cnt && !thd->killed);
-          mysql_mutex_unlock(log_lock);
+          thd->exit_cond(old_msg);
         }
         break;
             


Attachment: [text/bzr-bundle] bzr/marc.alff@oracle.com-20100917162153-p49yw0rhf25py9fa.bundle
Thread
bzr commit into mysql-5.5-bugfixing branch (marc.alff:3209) Marc Alff17 Sep