List:Commits« Previous MessageNext Message »
From:Ingo Struewing Date:June 5 2008 7:18pm
Subject:bk commit into 6.0 tree (istruewing:1.2627) WL#4259
View as plain text  
Below is the list of changes that have just been committed into a local
6.0 repository of istruewing.  When istruewing does a push these changes
will be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2008-06-05 21:17:55+02:00, istruewing@stripped +14 -0
  Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
  Changed synchronization point calls,
  adapted backup_commit_blocker.test and re-enabled it,
  fixed previous patches.
  
  WL#4259 - Debug Sync Facility
  Added extern "C" to improve linkability on some platforms.
  Fixed compiler warnings.
  Moved locking of the mutex out of the SIGNAL and WAIT_FOR branches.
  Made a more verbose proc_info.

  mysql-test/r/backup_commit_blocker.result@stripped, 2008-06-05 21:17:52+02:00, istruewing@stripped +100 -80
    Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
    Changed result.

  mysql-test/r/backup_ddl_blocker.result@stripped, 2008-06-05 21:17:52+02:00, istruewing@stripped +75 -75
    Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
    Changed result.

  mysql-test/r/backup_snapshot.result@stripped, 2008-06-05 21:17:52+02:00, istruewing@stripped +1 -1
    Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
    Changed result.

  mysql-test/t/backup_commit_blocker.test@stripped, 2008-06-05 21:17:52+02:00, istruewing@stripped +150 -231
    Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
    Changed test.

  mysql-test/t/backup_ddl_blocker.test@stripped, 2008-06-05 21:17:52+02:00, istruewing@stripped +6 -7
    Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
    Fixed forgotten comment changes from a previous patch.

  mysql-test/t/backup_snapshot.test@stripped, 2008-06-05 21:17:52+02:00, istruewing@stripped +1 -1
    Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
    Fixed sync point in the second test of a previous patch
    after placing the sync point in the real wait branch.

  mysql-test/t/disabled.def@stripped, 2008-06-05 21:17:52+02:00, istruewing@stripped +1 -1
    Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
    Re-enabled the converted test case.

  sql/backup/data_backup.cc@stripped, 2008-06-05 21:17:53+02:00, istruewing@stripped +3 -3
    Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
    Changed synchronization point calls.

  sql/debug_sync.cc@stripped, 2008-06-05 21:17:52+02:00, istruewing@stripped +29 -14
    WL#4259 - Debug Sync Facility
    Added extern "C" to improve linkability on some platforms.
    Fixed compiler warnings.
    Moved locking of the mutex out of the SIGNAL and WAIT_FOR branches.
    Made a more verbose proc_info.

  sql/handler.cc@stripped, 2008-06-05 21:17:52+02:00, istruewing@stripped +1 -1
    Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
    Changed synchronization point calls.

  sql/lock.cc@stripped, 2008-06-05 21:17:53+02:00, istruewing@stripped +32 -1
    Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
    Added a sync point into the waiting branch of
    lock_global_read_lock().
    Moved the sync point of wait_if_global_read_lock() inside the
    waiting branch. Added a comment.
    Added DBUG_PRINTs.

  sql/sql_delete.cc@stripped, 2008-06-05 21:17:53+02:00, istruewing@stripped +1 -7
    Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
    Changed synchronization point calls.

  sql/sql_insert.cc@stripped, 2008-06-05 21:17:53+02:00, istruewing@stripped +1 -2
    Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
    Changed synchronization point calls.

  sql/sql_parse.cc@stripped, 2008-06-05 21:17:53+02:00, istruewing@stripped +2 -2
    Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
    Changed synchronization point calls.

diff -Nrup a/mysql-test/r/backup_commit_blocker.result b/mysql-test/r/backup_commit_blocker.result
--- a/mysql-test/r/backup_commit_blocker.result	2007-12-04 18:38:00 +01:00
+++ b/mysql-test/r/backup_commit_blocker.result	2008-06-05 21:17:52 +02:00
@@ -1,6 +1,6 @@
+SET DEBUG_SYNC= 'RESET';
 DROP DATABASE IF EXISTS bup_commit_blocker;
 CREATE DATABASE bup_commit_blocker;
-SET GLOBAL debug="d,backup_debug:d,backup";
 
 Starting Test 1
 
@@ -55,62 +55,72 @@ Assumption (b): TRX in commit is include
 BEGIN;
 INSERT INTO bup_commit_blocker.t2 VALUES ("con3: 04 Some data to test");
 INSERT INTO bup_commit_blocker.t2 VALUES ("con3: 05 Some data to test");
-con5: Getting lock on commit blocker.
-SELECT get_lock("commit_blocker_step_1", 0);
-get_lock("commit_blocker_step_1", 0)
-1
+con1: Activate synchronization points for BACKUP.
+SET DEBUG_SYNC= 'before_commit_block SIGNAL bup_commit_block
+                 WAIT_FOR bup_go_read_lock';
+SET DEBUG_SYNC= 'wait_protect_global_read_lock SIGNAL bup_read_lock';
+SET DEBUG_SYNC= 'before_backup_unblock_commit WAIT_FOR finish';
 con1: Backing up database -- will block with lock
 BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak";
-con5: Checking lock
+con5: Wait for BACKUP to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_commit_block';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 state	info
-debug_sync_point: commit_blocker_step_1	BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
-con3: Starting commit -- will block with lock
+debug sync point: before_commit_block	BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
+con3: Activate synchronization points for COMMIT.
+SET DEBUG_SYNC= 'within_ha_commit_trans SIGNAL commit_read_locked
+                 WAIT_FOR commit_go_done';
+SET DEBUG_SYNC= 'after_commit SIGNAL commit_done
+                 WAIT_FOR finish';
+con3: Starting commit -- will block on sync point
 COMMIT;
-con5: Checking lock
+con5: Wait for COMMIT to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR commit_read_locked';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "COMMIT%";
 state	info
-debug_sync_point: commit_blocker_step_1	COMMIT
-con5: Getting lock on commit blocker.
-SELECT get_lock("backup_commit_blocker", 0);
-get_lock("backup_commit_blocker", 0)
-1
-con5: Checking lock
+debug sync point: within_ha_commit_trans	COMMIT
+con5: Let BACKUP run until the next sync point.
+SET DEBUG_SYNC= 'now SIGNAL bup_go_read_lock WAIT_FOR bup_read_lock';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 state	info
-debug_sync_point: backup_commit_blocker	BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
-con5: Checking lock
+Waiting to get readlock	BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
+con5: Let COMMIT continue until end of statement.
+SET DEBUG_SYNC= 'now SIGNAL commit_go_done WAIT_FOR commit_done';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "COMMIT%";
 state	info
-debug_sync_point: backup_commit_blocker	COMMIT
-con4: Starting begin -- will block with lock
+debug sync point: after_commit	COMMIT
+con4: Activate synchronization point for BEGIN.
+SET DEBUG_SYNC= 'before_begin_trans SIGNAL begin_starting
+                 WAIT_FOR finish';
+con4: Starting begin -- will block on sync point
 Assumption (c): TRX not started is not included in backup
 BEGIN;
-con5: Checking lock
+con5: Wait for BEGIN to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR begin_starting';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BEGIN%";
 state	info
-debug_sync_point: backup_commit_blocker	BEGIN
-con5: Releasing lock
-SELECT release_lock("backup_commit_blocker");
-release_lock("backup_commit_blocker")
-1
+debug sync point: before_begin_trans	BEGIN
+con5: Sending finish signal to wake them all.
+SET DEBUG_SYNC= 'now SIGNAL finish';
 con2: Completing transaction
 DELETE FROM bup_commit_blocker.t1 WHERE col_a LIKE '02%';
 COMMIT;
-con3: Completing transaction
+con3: Fetch COMMIT result
+con4: Fetch BEGIN result and completing transaction
 UPDATE bup_commit_blocker.t3 SET col_a = "con4: 05 CHANGED" WHERE col_a LIKE '05%';
 UPDATE bup_commit_blocker.t3 SET col_a = "con4: 06 CHANGED" WHERE col_a LIKE '06%';
 COMMIT;
+con1: Fetch BACKUP result
 backup_id
 #
 con1: Showing data after updates and backup
@@ -185,6 +195,7 @@ count(*)
 0
 con1: Cleanup
 DROP DATABASE bup_commit_blocker;
+SET DEBUG_SYNC= 'RESET';
 
 Starting Test 2
 
@@ -201,23 +212,18 @@ col_a
 30
 40
 50
-con5: Getting lock on commit blocker.
-SELECT get_lock("backup_commit_blocker", 0);
-get_lock("backup_commit_blocker", 0)
-1
-con5: Checking lock
+con1: Activate synchronization point for BACKUP.
+SET DEBUG_SYNC= 'before_backup_data_unlock SIGNAL bup_data_unlock
+                 WAIT_FOR finish';
 con1: Backing up database -- will block with lock
 BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak";
-con5: Getting lock on commit blocker.
-SELECT get_lock("commit_blocker_step_4", 0);
-get_lock("commit_blocker_step_4", 0)
-1
-con5: Checking lock
+con5: Wait for BACKUP to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_data_unlock';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 state	info
-debug_sync_point: commit_blocker_step_4	BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
+debug sync point: before_backup_data_unlock	BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
 con7: Show that the statement in progress has executed before backup.
 SELECT * FROM bup_commit_blocker.t5;
 col_a
@@ -226,24 +232,22 @@ col_a
 30
 40
 50
-con7: Starting non-trx about to start -- will block with lock
+con7: Activate synchronization point for UPDATE.
+SET DEBUG_SYNC= 'wait_if_global_read_lock SIGNAL upd_read_lock';
+con7: Starting non-trx about to start
 Assumption (e): non-TRX not started is not included in backup
 UPDATE bup_commit_blocker.t5 SET col_a = 333 WHERE col_a = 30;
-con5: Checking lock
+con5: Wait for UPDATE to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR upd_read_lock';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "UPDATE%";
 state	info
 Waiting for release of readlock	UPDATE bup_commit_blocker.t5 SET col_a = 333 WHERE col_a = 30
-con5: Releasing locks
-SELECT release_lock("commit_blocker_step_4");
-release_lock("commit_blocker_step_4")
-1
-SELECT release_lock("backup_commit_blocker");
-release_lock("backup_commit_blocker")
-NULL
-con6: Completing statement
-con7: Completing statement
+con5: Sending finish signal to wake them all.
+SET DEBUG_SYNC= 'now SIGNAL finish';
+con7: Fetch UPDATE result
+con1: Fetch BACKUP result
 backup_id
 #
 con1: Showing data after updates and backup
@@ -277,6 +281,7 @@ count(*)
 0
 con1: Cleanup
 DROP DATABASE bup_commit_blocker;
+SET DEBUG_SYNC= 'RESET';
 
 Starting Test 3
 
@@ -341,57 +346,68 @@ Assumption (b): TRX in commit is include
 BEGIN;
 INSERT INTO bup_commit_blocker.t2 VALUES ("con3: 04 Some data to test");
 INSERT INTO bup_commit_blocker.t2 VALUES ("con3: 05 Some data to test");
-con5: Getting lock on commit blocker.
-SELECT get_lock("commit_blocker_step_1", 0);
-get_lock("commit_blocker_step_1", 0)
-1
+con1: Activate synchronization points for BACKUP.
+SET DEBUG_SYNC= 'before_commit_block SIGNAL bup_commit_block
+                 WAIT_FOR bup_go_read_lock';
+SET DEBUG_SYNC= 'wait_protect_global_read_lock SIGNAL bup_read_lock';
+SET DEBUG_SYNC= 'before_backup_unblock_commit SIGNAL bup_unblocking
+                 WAIT_FOR finish';
 con1: Backing up database -- will block with lock
 BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak";
-con5: Checking lock
+con5: Wait for BACKUP to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_commit_block';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 state	info
-debug_sync_point: commit_blocker_step_1	BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
-con3: Starting commit -- will block with lock
+debug sync point: before_commit_block	BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
+con3: Activate synchronization points for COMMIT.
+SET DEBUG_SYNC= 'within_ha_commit_trans SIGNAL commit_read_locked
+                 WAIT_FOR commit_go_done';
+SET DEBUG_SYNC= 'after_commit WAIT_FOR finish';
+con3: Starting commit -- will block on sync point
 COMMIT;
-con5: Checking lock
+con5: Wait for COMMIT to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR commit_read_locked';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "COMMIT%";
 state	info
-debug_sync_point: commit_blocker_step_1	COMMIT
-con5: Getting lock on commit blocker.
-SELECT get_lock("backup_commit_blocker", 0);
-get_lock("backup_commit_blocker", 0)
-1
-con5: Checking lock
+debug sync point: within_ha_commit_trans	COMMIT
+con5: Let BACKUP run until the next sync point.
+SET DEBUG_SYNC= 'now SIGNAL bup_go_read_lock WAIT_FOR bup_read_lock';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 state	info
-debug_sync_point: backup_commit_blocker	BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
-con5: Checking lock
+Waiting to get readlock	BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
+con5: Let COMMIT continue until the sync point at its end.
+con5: The completed COMMIT implicitly wakes BACKUP.
+con5: So wait for BACKUP to reach the next synchronization point.
+SET DEBUG_SYNC= 'now SIGNAL commit_go_done WAIT_FOR bup_unblocking';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "COMMIT%";
 state	info
-debug_sync_point: backup_commit_blocker	COMMIT
+debug sync point: after_commit	COMMIT
+SELECT state, info FROM
+INFORMATION_SCHEMA.PROCESSLIST
+WHERE info LIKE "BACKUP DATABASE%";
+state	info
+debug sync point: before_backup_unblock_commit	BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
+con4: Activate synchronization point for BEGIN.
+SET DEBUG_SYNC= 'before_begin_trans SIGNAL begin_starting
+                 WAIT_FOR finish';
 con4: Starting begin -- will block with lock
 Assumption (c): TRX not started is not included in backup
 BEGIN;
-con5: Checking lock
+con5: Wait for BEGIN to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR begin_starting';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BEGIN%";
 state	info
-debug_sync_point: backup_commit_blocker	BEGIN
-con5: Checking lock
-SELECT state, info FROM
-INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "BACKUP DATABASE%";
-state	info
-debug_sync_point: backup_commit_blocker	BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
+debug sync point: before_begin_trans	BEGIN
 con7: Show that the statement in progress has executed before backup.
 SELECT * FROM bup_commit_blocker.t5;
 col_a
@@ -400,27 +416,30 @@ col_a
 30
 40
 50
+con7: Activate synchronization point for DELETE.
+SET DEBUG_SYNC= 'wait_if_global_read_lock SIGNAL del_read_lock';
 con7: Starting non-trx about to start -- will block with lock
 Assumption (e): non-TRX not started is not included in backup
 DELETE FROM bup_commit_blocker.t5 WHERE col_a = 50;
-con5: Checking lock
+con5: Wait for DELETE to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR del_read_lock';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "DELETE%";
 state	info
 Waiting for release of readlock	DELETE FROM bup_commit_blocker.t5 WHERE col_a = 50
-con5: Releasing lock
-SELECT release_lock("backup_commit_blocker");
-release_lock("backup_commit_blocker")
-1
+con5: Sending finish signal to wake them all.
+SET DEBUG_SYNC= 'now SIGNAL finish';
 con2: Completing transaction
 DELETE FROM bup_commit_blocker.t2 WHERE col_a LIKE '02%';
 COMMIT;
-con3: Completing transaction
+con3: Fetch COMMIT result
+con4: Fetch BEGIN result and completing transaction
 UPDATE bup_commit_blocker.t3 SET col_a = "con4: 05 CHANGED" WHERE col_a LIKE '05%';
 UPDATE bup_commit_blocker.t3 SET col_a = "con4: 06 CHANGED" WHERE col_a LIKE '06%';
 COMMIT;
-con7: Completing statement
+con7: Fetch DELETE result
+con1: Fetch BACKUP result
 backup_id
 #
 con1: Showing data after updates and backup
@@ -513,3 +532,4 @@ count(*)
 1
 con1: Cleanup
 DROP DATABASE bup_commit_blocker;
+SET DEBUG_SYNC= 'RESET';
diff -Nrup a/mysql-test/r/backup_ddl_blocker.result b/mysql-test/r/backup_ddl_blocker.result
--- a/mysql-test/r/backup_ddl_blocker.result	2008-05-23 17:27:24 +02:00
+++ b/mysql-test/r/backup_ddl_blocker.result	2008-06-05 21:17:52 +02:00
@@ -45,21 +45,21 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 state	info
-before_block_ddl	BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
+debug sync point: before_block_ddl	BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
 state	info
-after_start_ddl	CREATE TABLE bup_ddl_blocker.t1 (col_a CHAR(40)) ENGINE=INNODB
+debug sync point: after_start_ddl	CREATE TABLE bup_ddl_blocker.t1 (col_a CHAR(40)) ENGINE=INNODB
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
 state	info
-after_start_ddl	ALTER TABLE bup_ddl_blocker.t2 ADD COLUMN col_b int
+debug sync point: after_start_ddl	ALTER TABLE bup_ddl_blocker.t2 ADD COLUMN col_b int
 con6: Resume all and wait for backup to start after DDL finish.
 SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 state	info
-after_block_ddl	BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
+debug sync point: after_block_ddl	BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
 con4: Activate synchronization point for DDL.
 SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
                  WAIT_FOR status_shown2';
@@ -77,11 +77,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
 state	info
-before_check_ddl_blocked	CREATE TABLE bup_ddl_blocker.t3 (col_a CHAR(40)) ENGINE=INNODB
+debug sync point: before_check_ddl_blocked	CREATE TABLE bup_ddl_blocker.t3 (col_a CHAR(40)) ENGINE=INNODB
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
 state	info
-before_check_ddl_blocked	ALTER TABLE bup_ddl_blocker.t4 ADD COLUMN col_b int
+debug sync point: before_check_ddl_blocked	ALTER TABLE bup_ddl_blocker.t4 ADD COLUMN col_b int
 con6: Resume all.
 SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 con2: Completing DDL
@@ -179,21 +179,21 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RESTORE FROM%";
 state	info
-before_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: before_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
 state	info
-after_start_ddl	CREATE TABLE bup_ddl_blocker.t1 (col_a CHAR(40)) ENGINE=INNODB
+debug sync point: after_start_ddl	CREATE TABLE bup_ddl_blocker.t1 (col_a CHAR(40)) ENGINE=INNODB
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
 state	info
-after_start_ddl	ALTER TABLE bup_ddl_blocker.t2 ADD COLUMN col_b int
+debug sync point: after_start_ddl	ALTER TABLE bup_ddl_blocker.t2 ADD COLUMN col_b int
 con6: Resume all and wait for restore to start after DDL finish.
 SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RESTORE FROM%";
 state	info
-after_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: after_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
 con4: Activate synchronization point for DDL.
 SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
                  WAIT_FOR status_shown2';
@@ -211,11 +211,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
 state	info
-before_check_ddl_blocked	CREATE TABLE bup_ddl_blocker.t3 (col_a CHAR(40)) ENGINE=INNODB
+debug sync point: before_check_ddl_blocked	CREATE TABLE bup_ddl_blocker.t3 (col_a CHAR(40)) ENGINE=INNODB
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
 state	info
-before_check_ddl_blocked	ALTER TABLE bup_ddl_blocker.t4 ADD COLUMN col_b int
+debug sync point: before_check_ddl_blocked	ALTER TABLE bup_ddl_blocker.t4 ADD COLUMN col_b int
 con6: Resume all.
 SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 con2: Completing DDL
@@ -288,21 +288,21 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 state	info
-before_block_ddl	BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
+debug sync point: before_block_ddl	BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
 state	info
-after_start_ddl	RENAME TABLE bup_ddl_blocker.t1 TO bup_ddl_blocker.t01
+debug sync point: after_start_ddl	RENAME TABLE bup_ddl_blocker.t1 TO bup_ddl_blocker.t01
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
 state	info
-after_start_ddl	REPAIR TABLE bup_ddl_blocker.t2
+debug sync point: after_start_ddl	REPAIR TABLE bup_ddl_blocker.t2
 con6: Resume all and wait for backup to start after DDL finish.
 SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 state	info
-after_block_ddl	BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
+debug sync point: after_block_ddl	BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
 con4: Activate synchronization point for DDL.
 SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
                  WAIT_FOR status_shown2';
@@ -320,11 +320,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
 state	info
-before_check_ddl_blocked	RENAME TABLE bup_ddl_blocker.t3 TO bup_ddl_blocker.t03
+debug sync point: before_check_ddl_blocked	RENAME TABLE bup_ddl_blocker.t3 TO bup_ddl_blocker.t03
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
 state	info
-before_check_ddl_blocked	REPAIR TABLE bup_ddl_blocker.t4
+debug sync point: before_check_ddl_blocked	REPAIR TABLE bup_ddl_blocker.t4
 con6: Resume all.
 SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 con2: Completing DDL
@@ -413,21 +413,21 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RESTORE FROM%";
 state	info
-before_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: before_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
 state	info
-after_start_ddl	RENAME TABLE bup_ddl_blocker.t1 TO bup_ddl_blocker.t01
+debug sync point: after_start_ddl	RENAME TABLE bup_ddl_blocker.t1 TO bup_ddl_blocker.t01
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
 state	info
-after_start_ddl	REPAIR TABLE bup_ddl_blocker.t2
+debug sync point: after_start_ddl	REPAIR TABLE bup_ddl_blocker.t2
 con6: Resume all and wait for restore to start after DDL finish.
 SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RESTORE FROM%";
 state	info
-after_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: after_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
 con4: Activate synchronization point for DDL.
 SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
                  WAIT_FOR status_shown2';
@@ -445,11 +445,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
 state	info
-before_check_ddl_blocked	RENAME TABLE bup_ddl_blocker.t3 TO bup_ddl_blocker.t03
+debug sync point: before_check_ddl_blocked	RENAME TABLE bup_ddl_blocker.t3 TO bup_ddl_blocker.t03
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
 state	info
-before_check_ddl_blocked	REPAIR TABLE bup_ddl_blocker.t4
+debug sync point: before_check_ddl_blocked	REPAIR TABLE bup_ddl_blocker.t4
 con6: Resume all.
 SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 con2: Completing DDL
@@ -518,21 +518,21 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 state	info
-before_block_ddl	BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
+debug sync point: before_block_ddl	BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
 state	info
-after_start_ddl	OPTIMIZE TABLE bup_ddl_blocker.t1
+debug sync point: after_start_ddl	OPTIMIZE TABLE bup_ddl_blocker.t1
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
 state	info
-after_start_ddl	DROP TABLE bup_ddl_blocker.t2
+debug sync point: after_start_ddl	DROP TABLE bup_ddl_blocker.t2
 con6: Resume all and wait for backup to start after DDL finish.
 SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 state	info
-after_block_ddl	BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
+debug sync point: after_block_ddl	BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
 con4: Activate synchronization point for DDL.
 SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
                  WAIT_FOR status_shown2';
@@ -550,11 +550,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
 state	info
-before_check_ddl_blocked	OPTIMIZE TABLE bup_ddl_blocker.t3
+debug sync point: before_check_ddl_blocked	OPTIMIZE TABLE bup_ddl_blocker.t3
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
 state	info
-before_check_ddl_blocked	DROP TABLE bup_ddl_blocker.t4
+debug sync point: before_check_ddl_blocked	DROP TABLE bup_ddl_blocker.t4
 con6: Resume all.
 SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 con2: Completing DDL
@@ -638,21 +638,21 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RESTORE FROM%";
 state	info
-before_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: before_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
 state	info
-after_start_ddl	OPTIMIZE TABLE bup_ddl_blocker.t1
+debug sync point: after_start_ddl	OPTIMIZE TABLE bup_ddl_blocker.t1
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
 state	info
-after_start_ddl	DROP TABLE bup_ddl_blocker.t2
+debug sync point: after_start_ddl	DROP TABLE bup_ddl_blocker.t2
 con6: Resume all and wait for restore to start after DDL finish.
 SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RESTORE FROM%";
 state	info
-after_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: after_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
 con4: Activate synchronization point for DDL.
 SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
                  WAIT_FOR status_shown2';
@@ -670,11 +670,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
 state	info
-before_check_ddl_blocked	OPTIMIZE TABLE bup_ddl_blocker.t3
+debug sync point: before_check_ddl_blocked	OPTIMIZE TABLE bup_ddl_blocker.t3
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
 state	info
-before_check_ddl_blocked	DROP TABLE bup_ddl_blocker.t4
+debug sync point: before_check_ddl_blocked	DROP TABLE bup_ddl_blocker.t4
 con6: Resume all.
 SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 con2: Completing DDL
@@ -744,21 +744,21 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 state	info
-before_block_ddl	BACKUP DATABASE * TO "bup_ddl_blocker.bak"
+debug sync point: before_block_ddl	BACKUP DATABASE * TO "bup_ddl_blocker.bak"
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
 state	info
-after_start_ddl	CREATE DATABASE bup_ddl_blocker_1
+debug sync point: after_start_ddl	CREATE DATABASE bup_ddl_blocker_1
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
 state	info
-after_start_ddl	DROP DATABASE bup_ddl_blocker_2
+debug sync point: after_start_ddl	DROP DATABASE bup_ddl_blocker_2
 con6: Resume all and wait for backup to start after DDL finish.
 SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 state	info
-after_block_ddl	BACKUP DATABASE * TO "bup_ddl_blocker.bak"
+debug sync point: after_block_ddl	BACKUP DATABASE * TO "bup_ddl_blocker.bak"
 con4: Activate synchronization point for DDL.
 SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
                  WAIT_FOR status_shown2';
@@ -776,11 +776,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
 state	info
-before_check_ddl_blocked	CREATE DATABASE bup_ddl_blocker_3
+debug sync point: before_check_ddl_blocked	CREATE DATABASE bup_ddl_blocker_3
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
 state	info
-before_check_ddl_blocked	DROP DATABASE bup_ddl_blocker_4
+debug sync point: before_check_ddl_blocked	DROP DATABASE bup_ddl_blocker_4
 con6: Resume all.
 SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 con2: Completing DDL
@@ -864,21 +864,21 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RESTORE FROM%";
 state	info
-before_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: before_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
 state	info
-after_start_ddl	CREATE DATABASE bup_ddl_blocker_1
+debug sync point: after_start_ddl	CREATE DATABASE bup_ddl_blocker_1
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
 state	info
-after_start_ddl	DROP DATABASE bup_ddl_blocker_2
+debug sync point: after_start_ddl	DROP DATABASE bup_ddl_blocker_2
 con6: Resume all and wait for restore to start after DDL finish.
 SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RESTORE FROM%";
 state	info
-after_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: after_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
 con4: Activate synchronization point for DDL.
 SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
                  WAIT_FOR status_shown2';
@@ -896,11 +896,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
 state	info
-before_check_ddl_blocked	CREATE DATABASE bup_ddl_blocker_3
+debug sync point: before_check_ddl_blocked	CREATE DATABASE bup_ddl_blocker_3
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
 state	info
-before_check_ddl_blocked	DROP DATABASE bup_ddl_blocker_4
+debug sync point: before_check_ddl_blocked	DROP DATABASE bup_ddl_blocker_4
 con6: Resume all.
 SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 con2: Completing DDL
@@ -965,21 +965,21 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 state	info
-before_block_ddl	BACKUP DATABASE * TO "bup_ddl_blocker.bak"
+debug sync point: before_block_ddl	BACKUP DATABASE * TO "bup_ddl_blocker.bak"
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
 state	info
-after_start_ddl	TRUNCATE TABLE bup_ddl_blocker_2.t1
+debug sync point: after_start_ddl	TRUNCATE TABLE bup_ddl_blocker_2.t1
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
 state	info
-after_start_ddl	ALTER DATABASE bup_ddl_blocker_2 CHARACTER SET latin2
+debug sync point: after_start_ddl	ALTER DATABASE bup_ddl_blocker_2 CHARACTER SET latin2
 con6: Resume all and wait for backup to start after DDL finish.
 SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 state	info
-after_block_ddl	BACKUP DATABASE * TO "bup_ddl_blocker.bak"
+debug sync point: after_block_ddl	BACKUP DATABASE * TO "bup_ddl_blocker.bak"
 con4: Activate synchronization point for DDL.
 SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
                  WAIT_FOR status_shown2';
@@ -997,11 +997,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
 state	info
-before_check_ddl_blocked	ALTER DATABASE bup_ddl_blocker_4 CHARACTER SET latin2
+debug sync point: before_check_ddl_blocked	ALTER DATABASE bup_ddl_blocker_4 CHARACTER SET latin2
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
 state	info
-before_check_ddl_blocked	TRUNCATE TABLE bup_ddl_blocker_4.t1
+debug sync point: before_check_ddl_blocked	TRUNCATE TABLE bup_ddl_blocker_4.t1
 con6: Resume all.
 SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 con2: Completing DDL
@@ -1114,21 +1114,21 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RESTORE FROM%";
 state	info
-before_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: before_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
 state	info
-after_start_ddl	ALTER DATABASE bup_ddl_blocker_2 CHARACTER SET latin2
+debug sync point: after_start_ddl	ALTER DATABASE bup_ddl_blocker_2 CHARACTER SET latin2
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
 state	info
-after_start_ddl	TRUNCATE TABLE bup_ddl_blocker_2.t1
+debug sync point: after_start_ddl	TRUNCATE TABLE bup_ddl_blocker_2.t1
 con6: Resume all and wait for restore to start after DDL finish.
 SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RESTORE FROM%";
 state	info
-after_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: after_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
 con4: Activate synchronization point for DDL.
 SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
                  WAIT_FOR status_shown2';
@@ -1146,11 +1146,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
 state	info
-before_check_ddl_blocked	TRUNCATE TABLE bup_ddl_blocker_4.t1
+debug sync point: before_check_ddl_blocked	TRUNCATE TABLE bup_ddl_blocker_4.t1
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
 state	info
-before_check_ddl_blocked	ALTER DATABASE bup_ddl_blocker_4 CHARACTER SET latin2
+debug sync point: before_check_ddl_blocked	ALTER DATABASE bup_ddl_blocker_4 CHARACTER SET latin2
 con6: Resume all.
 SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 con2: Completing DDL
@@ -1241,23 +1241,23 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 state	info
-before_block_ddl	BACKUP DATABASE bup_ddl_blocker_1, bup_ddl_blocker_2,
+debug sync point: before_block_ddl	BACKUP DATABASE bup_ddl_blocker_1, bup_ddl_blocker_2,
 bup_ddl_blocker_3, bup_ddl_blocker_4
 TO "bup_ddl_blocker.bak"
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "CREATE INDEX 1t1col_b%";
 state	info
-after_start_ddl	CREATE INDEX 1t1col_b ON bup_ddl_blocker_1.t1 (col_b)
+debug sync point: after_start_ddl	CREATE INDEX 1t1col_b ON bup_ddl_blocker_1.t1 (col_b)
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "DROP INDEX 2t1col_b%";
 state	info
-after_start_ddl	DROP INDEX 2t1col_b ON bup_ddl_blocker_2.t1
+debug sync point: after_start_ddl	DROP INDEX 2t1col_b ON bup_ddl_blocker_2.t1
 con6: Resume all and wait for backup to start after DDL finish.
 SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 state	info
-after_block_ddl	BACKUP DATABASE bup_ddl_blocker_1, bup_ddl_blocker_2,
+debug sync point: after_block_ddl	BACKUP DATABASE bup_ddl_blocker_1, bup_ddl_blocker_2,
 bup_ddl_blocker_3, bup_ddl_blocker_4
 TO "bup_ddl_blocker.bak"
 con4: Activate synchronization point for DDL.
@@ -1277,11 +1277,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "CREATE INDEX 3t1col_b%";
 state	info
-before_check_ddl_blocked	CREATE INDEX 3t1col_b ON bup_ddl_blocker_3.t1 (col_b)
+debug sync point: before_check_ddl_blocked	CREATE INDEX 3t1col_b ON bup_ddl_blocker_3.t1 (col_b)
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "DROP INDEX 4t1col_b%";
 state	info
-before_check_ddl_blocked	DROP INDEX 4t1col_b ON bup_ddl_blocker_4.t1
+debug sync point: before_check_ddl_blocked	DROP INDEX 4t1col_b ON bup_ddl_blocker_4.t1
 con6: Resume all.
 SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 con2: Completing DDL
@@ -1430,21 +1430,21 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RESTORE FROM%";
 state	info
-before_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: before_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "CREATE INDEX 1t1col_b%";
 state	info
-after_start_ddl	CREATE INDEX 1t1col_b ON bup_ddl_blocker_1.t1 (col_b)
+debug sync point: after_start_ddl	CREATE INDEX 1t1col_b ON bup_ddl_blocker_1.t1 (col_b)
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "DROP INDEX 2t1col_b%";
 state	info
-after_start_ddl	DROP INDEX 2t1col_b ON bup_ddl_blocker_2.t1
+debug sync point: after_start_ddl	DROP INDEX 2t1col_b ON bup_ddl_blocker_2.t1
 con6: Resume all and wait for restore to start after DDL finish.
 SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RESTORE FROM%";
 state	info
-after_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: after_block_ddl	RESTORE FROM "bup_ddl_blocker_orig.bak"
 con4: Activate synchronization point for DDL.
 SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
                  WAIT_FOR status_shown2';
@@ -1462,11 +1462,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "CREATE INDEX 3t1col_b%";
 state	info
-before_check_ddl_blocked	CREATE INDEX 3t1col_b ON bup_ddl_blocker_3.t1 (col_b)
+debug sync point: before_check_ddl_blocked	CREATE INDEX 3t1col_b ON bup_ddl_blocker_3.t1 (col_b)
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "DROP INDEX 4t1col_b%";
 state	info
-before_check_ddl_blocked	DROP INDEX 4t1col_b ON bup_ddl_blocker_4.t1
+debug sync point: before_check_ddl_blocked	DROP INDEX 4t1col_b ON bup_ddl_blocker_4.t1
 con6: Resume all.
 SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 con2: Completing DDL
@@ -1571,15 +1571,15 @@ SET DEBUG_SYNC= 'now WAIT_FOR con4_start
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t1%";
 state	info
-after_start_ddl	ALTER TABLE bup_ddl_blocker.t1 ADD COLUMN col_b int
+debug sync point: after_start_ddl	ALTER TABLE bup_ddl_blocker.t1 ADD COLUMN col_b int
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "ALTER TABLE test.t2%";
 state	info
-after_start_ddl	ALTER TABLE test.t2 ADD COLUMN col_b int
+debug sync point: after_start_ddl	ALTER TABLE test.t2 ADD COLUMN col_b int
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t3%";
 state	info
-after_start_ddl	ALTER TABLE bup_ddl_blocker.t3 ADD COLUMN col_b int
+debug sync point: after_start_ddl	ALTER TABLE bup_ddl_blocker.t3 ADD COLUMN col_b int
 con5: Resume all.
 SET DEBUG_SYNC= 'now SIGNAL status_shown';
 con2: Completing DDL
diff -Nrup a/mysql-test/r/backup_snapshot.result b/mysql-test/r/backup_snapshot.result
--- a/mysql-test/r/backup_snapshot.result	2008-05-22 17:03:10 +02:00
+++ b/mysql-test/r/backup_snapshot.result	2008-06-05 21:17:52 +02:00
@@ -83,7 +83,7 @@ con2: Wait for backup to start reading.
 SET DEBUG_SYNC= 'now WAIT_FOR reading';
 con2: Start an insert now that CS has a transaction 
 con2: Activate sync points for the insert statement.
-SET DEBUG_SYNC= 'wait_if_global_read_lock SIGNAL inserting';
+SET DEBUG_SYNC= 'after_insert_locked_tables SIGNAL inserting';
 INSERT INTO bup_snapshot.t1 VALUES("- Dave Mathews");
 con2: insert additional rows.
 INSERT INTO bup_snapshot.t1 VALUES("- Yes");
diff -Nrup a/mysql-test/t/backup_commit_blocker.test b/mysql-test/t/backup_commit_blocker.test
--- a/mysql-test/t/backup_commit_blocker.test	2007-12-20 21:32:16 +01:00
+++ b/mysql-test/t/backup_commit_blocker.test	2008-06-05 21:17:52 +02:00
@@ -27,24 +27,13 @@
 #
 # TODO : Add a native driver to the test when one becomes available
 #
-# We use a breakpoint named "backup_commit_blocker" which is placed
-# strategically in the code to allow the threads to pause at the 
-# corresponding location for those goals above.
-#
-# Notes
-#   You must use a dedicated connection for getting and releasing locks.
-# Do not issue a get_lock() or release_lock() in the same connection
-# (thread) as code that calls BACKUP_BREAKPOINT(). Using the same connection
-# to get/release locks and run code that issues BACKUP_BREAKPOINTs will result
-# in an assertion using DEBUG_ASSERT(thd->ull == NULL) from debug_sync_point()
-# in item_func.cc.
-#
 
 --source include/have_innodb.inc
---source include/have_debug.inc
+--source include/have_debug_sync.inc
 --source include/not_embedded.inc
 
 --disable_warnings
+SET DEBUG_SYNC= 'RESET';
 DROP DATABASE IF EXISTS bup_commit_blocker;
 --error 0,1
 --remove_file $MYSQLTEST_VARDIR/master-data/bup_commit_blocker.bak;
@@ -59,7 +48,7 @@ CREATE DATABASE bup_commit_blocker;
 # con2 - used for setting up transactions in progress
 # con3 - used for setting up transactions in commit
 # con4 - used for setting up transactions about to start
-# con5 - used for setting and releasing breakpoints
+# con5 - used to show status
 # con6 - used for setting up non-transactions in progress
 # con7 - used for setting up non-transactions about to start
 #
@@ -74,9 +63,6 @@ connect (con7,localhost,root,,);
 
 connection con1;
 
-# Setup the server to use the backup breakpoints
-SET GLOBAL debug="d,backup_debug:d,backup";
-
 #
 # Test 1 - transactional statements only
 #
@@ -96,16 +82,12 @@ SET GLOBAL debug="d,backup_debug:d,backu
 #     |       |      BEGIN      |        |
 #     |       |     INSERT t2   |        |
 #     |       |     INSERT t2   |        |
-#     |       |        |        |  lock("commit_blocker_step_1");
+#     |       |        |        |    show status
 #   BACKUP    |        |        |        |
-#     |       |        |        |  <wait for locks>
 #     |       |      COMMIT     |        |
-#     |       |        |        |  <wait for locks>
-#     |       |        |        |  lock("backup_commit_blocker");
-#     |       |        |        |  <wait for locks>
+#     |       |        |        |    show status
 #     |       |        |      BEGIN      |
-#     |       |        |        |  <wait for locks>
-#     |       |        |        |  <release locks>
+#     |       |        |        |    show status
 #     |    DELETE t1   |        |        |
 #     |     COMMIT     |        |        |
 #     |       |      <...>      |        |
@@ -163,14 +145,6 @@ BEGIN;
   INSERT INTO bup_commit_blocker.t2 VALUES ("con3: 04 Some data to test");
   INSERT INTO bup_commit_blocker.t2 VALUES ("con3: 05 Some data to test");
 
-connection con5;
-
-# Set the breakpoint for the commit blocker.
---echo con5: Getting lock on commit blocker.
-SELECT get_lock("commit_blocker_step_1", 0);
-
-# Start the backup and allow it to break on lock.
-
 connection con1;
 
 #
@@ -178,89 +152,73 @@ connection con1;
 # We stop (with the lock) the backup after the metadata but before the
 # commit blocker.
 #
+--echo con1: Activate synchronization points for BACKUP.
+SET DEBUG_SYNC= 'before_commit_block SIGNAL bup_commit_block
+                 WAIT_FOR bup_go_read_lock';
+SET DEBUG_SYNC= 'wait_protect_global_read_lock SIGNAL bup_read_lock';
+SET DEBUG_SYNC= 'before_backup_unblock_commit WAIT_FOR finish';
 --echo con1: Backing up database -- will block with lock
 send BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak";
 
 connection con5;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "debug_sync_point: commit_blocker_step_1"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
+--echo con5: Wait for BACKUP to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_commit_block';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 
 connection con3;
 
---echo con3: Starting commit -- will block with lock
+--echo con3: Activate synchronization points for COMMIT.
+SET DEBUG_SYNC= 'within_ha_commit_trans SIGNAL commit_read_locked
+                 WAIT_FOR commit_go_done';
+SET DEBUG_SYNC= 'after_commit SIGNAL commit_done
+                 WAIT_FOR finish';
+--echo con3: Starting commit -- will block on sync point
 send COMMIT;
 
 connection con5;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "debug_sync_point: commit_blocker_step_1"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "COMMIT%";
---source include/wait_condition.inc
-
+--echo con5: Wait for COMMIT to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR commit_read_locked';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "COMMIT%";
 
-# Set the breakpoint for the commit blocker.
---echo con5: Getting lock on commit blocker.
-SELECT get_lock("backup_commit_blocker", 0);
-
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "debug_sync_point: backup_commit_blocker"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
+--echo con5: Let BACKUP run until the next sync point.
+SET DEBUG_SYNC= 'now SIGNAL bup_go_read_lock WAIT_FOR bup_read_lock';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "debug_sync_point: backup_commit_blocker"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "COMMIT%";
---source include/wait_condition.inc
-
+--echo con5: Let COMMIT continue until end of statement.
+SET DEBUG_SYNC= 'now SIGNAL commit_go_done WAIT_FOR commit_done';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "COMMIT%";
 
 connection con4;
 
---echo con4: Starting begin -- will block with lock
+--echo con4: Activate synchronization point for BEGIN.
+SET DEBUG_SYNC= 'before_begin_trans SIGNAL begin_starting
+                 WAIT_FOR finish';
+--echo con4: Starting begin -- will block on sync point
 --echo Assumption (c): TRX not started is not included in backup
 send BEGIN;
 
 connection con5;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "debug_sync_point: backup_commit_blocker"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BEGIN%";
---source include/wait_condition.inc
-
+--echo con5: Wait for BEGIN to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR begin_starting';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BEGIN%";
 
---echo con5: Releasing lock
-SELECT release_lock("backup_commit_blocker");
+--echo con5: Sending finish signal to wake them all.
+SET DEBUG_SYNC= 'now SIGNAL finish';
 
-# Reconnect to con2, con3, and con4 and allow them to finish.
+# Reconnect to connections and fetch their results.
 
 connection con2;
 
@@ -269,18 +227,21 @@ connection con2;
 COMMIT;
 
 connection con3;
---echo con3: Completing transaction
+
+--echo con3: Fetch COMMIT result
 reap;
 
 connection con4;
+
+--echo con4: Fetch BEGIN result and completing transaction
 reap;
   UPDATE bup_commit_blocker.t3 SET col_a = "con4: 05 CHANGED" WHERE col_a LIKE '05%';
   UPDATE bup_commit_blocker.t3 SET col_a = "con4: 06 CHANGED" WHERE col_a LIKE '06%';
 COMMIT;
 
-# Reconnect to con1 and let backup finish.
-
 connection con1;
+
+--echo con1: Fetch BACKUP result
 --replace_column 1 #
 reap;
 
@@ -324,6 +285,7 @@ SELECT count(*) FROM bup_commit_blocker.
 DROP DATABASE bup_commit_blocker;
 
 remove_file $MYSQLTEST_VARDIR/master-data/bup_commit_blocker.bak;
+SET DEBUG_SYNC= 'RESET';
 
 #
 # Test 2 - non-transactional statements only
@@ -333,23 +295,29 @@ remove_file $MYSQLTEST_VARDIR/master-dat
 --echo Starting Test 2
 --echo 
 
+# Ingo: DELETE was disabled before converting the test from
+#       BACKUP_BREAKPOINT to DEBUG_SYNC. I left it disabled
+#       as an attempt to enable it made an infinite loop in
+#       write_table_data() in the loop:
+#    while (sch.prepare_count > 0)
+#    if (sch.step())
+#      goto error;
+#        sch.prepare_count did not change from being 1.
+#        When this is fixed, please remove this comment.
+
 #
 # Test 2 sequence diagram (not UML)
 #
 #   con1     con2     con3     con4     con5     con6       con7
 #  (setup)    |        |        |        |        |          |
 #     |       |        |        |        |        |          |
-#     |       |        |        |  lock("backup_commit_blocker");
-#     |       |        |        |        |    DELETE t4      |
-#     |       |        |        |  <wait for locks>          |
+#     |       |        |        |        |   #DELETE t4      |
+#     |       |        |        |   #show status  |          |
 #   BACKUP    |        |        |        |        |          |
-#     |       |        |        |  <wait for locks>          |
-#     |       |        |        |  lock("commit_blocker_step_4");
-#     |       |        |        |  <wait for locks>          |
-#     |       |        |        |    (results)    |          |
+#     |       |        |        |    show status  |          |
+#     |       |        |        |        |        |       (results)
 #     |       |        |        |        |        |       UPDATE t5
-#     |       |        |        |  <wait for locks>          |
-#     |       |        |        |  <release locks>|          |
+#     |       |        |        |    show status  |          |
 #   <...>     |        |        |        |      <...>      <...>
 # (results)   |        |        |        |        |          |
 #
@@ -372,49 +340,34 @@ INSERT INTO bup_commit_blocker.t5 VALUES
 #SELECT * FROM bup_commit_blocker.t4;
 SELECT * FROM bup_commit_blocker.t5;
 
-connection con5;
-
-# Set the breakpoint for the commit blocker.
---echo con5: Getting lock on commit blocker.
-SELECT get_lock("backup_commit_blocker", 0);
-
-connection con6;
-
+#connection con6;
+#
+#--echo con6: Activate synchronization point for DELETE.
+#SET DEBUG_SYNC= 'at_delete_end SIGNAL del_at_end WAIT_FOR finish';
 #--echo con6: Starting non-trx in progress -- will block with lock
 #--echo Assumption (d): non-TRX in progress is included in backup
 #send DELETE FROM bup_commit_blocker.t4 WHERE col_a <= 2;
-
-connection con5;
-
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-#let $wait_condition = SELECT state = "debug_sync_point: backup_commit_blocker"
-#                      FROM INFORMATION_SCHEMA.PROCESSLIST
-#                      WHERE info LIKE "DELETE%";
-#--source include/wait_condition.inc
+#
+#connection con5;
+#
+#--echo con5: Wait for DELETE to reach its synchronization point.
+#SET DEBUG_SYNC= 'now WAIT_FOR del_at_end';
+#SELECT state, info FROM
+#INFORMATION_SCHEMA.PROCESSLIST
+#WHERE info LIKE "DELETE%";
 
 connection con1;
 
+--echo con1: Activate synchronization point for BACKUP.
+SET DEBUG_SYNC= 'before_backup_data_unlock SIGNAL bup_data_unlock
+                 WAIT_FOR finish';
 --echo con1: Backing up database -- will block with lock
 send BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak";
 
 connection con5;
 
-# Set the breakpoint for the commit blocker.
-#
-# This allows the statement that was inprogress to finish and unblock the 
-# backup which is waiting on open_and_lock_tables.
-#
---echo con5: Getting lock on commit blocker.
-SELECT get_lock("commit_blocker_step_4", 0);
-
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "debug_sync_point: commit_blocker_step_4"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
+--echo con5: Wait for BACKUP to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_data_unlock';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
@@ -425,41 +378,38 @@ connection con7;
 #SELECT * FROM bup_commit_blocker.t4;
 SELECT * FROM bup_commit_blocker.t5;
 
---echo con7: Starting non-trx about to start -- will block with lock
+--echo con7: Activate synchronization point for UPDATE.
+SET DEBUG_SYNC= 'wait_if_global_read_lock SIGNAL upd_read_lock';
+--echo con7: Starting non-trx about to start
 --echo Assumption (e): non-TRX not started is not included in backup
 send UPDATE bup_commit_blocker.t5 SET col_a = 333 WHERE col_a = 30;
 
 connection con5;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "Waiting for release of readlock"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "UPDATE%";
---source include/wait_condition.inc
-
+--echo con5: Wait for UPDATE to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR upd_read_lock';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "UPDATE%";
 
---echo con5: Releasing locks
-SELECT release_lock("commit_blocker_step_4");
-SELECT release_lock("backup_commit_blocker");
+--echo con5: Sending finish signal to wake them all.
+SET DEBUG_SYNC= 'now SIGNAL finish';
 
-# Reconnect to con6 and con7 and allow them to finish.
+# Reconnect to con6 and con7 and fetch their results.
 
-connection con6;
-
---echo con6: Completing statement
+#connection con6;
+#
+#--echo con6: Fetch DELETE result
 #reap;
 
 connection con7;
---echo con7: Completing statement
-reap;
 
-# Reconnect to con1 and let backup finish.
+--echo con7: Fetch UPDATE result
+reap;
 
 connection con1;
+
+--echo con1: Fetch BACKUP result
 --replace_column 1 #
 reap;
 
@@ -497,6 +447,7 @@ SELECT count(*) FROM bup_commit_blocker.
 DROP DATABASE bup_commit_blocker;
 
 remove_file $MYSQLTEST_VARDIR/master-data/bup_commit_blocker.bak;
+SET DEBUG_SYNC= 'RESET';
 
 #
 # Test 3 - mix of both transactional and non-transactional statements
@@ -517,20 +468,17 @@ remove_file $MYSQLTEST_VARDIR/master-dat
 #     |       |      BEGIN      |        |        |          |
 #     |       |     INSERT t2   |        |        |          |
 #     |       |     INSERT t2   |        |        |          |
-#     |       |        |        |  lock("commit_blocker_step_1");
 #   BACKUP    |        |        |        |        |          |
-#     |       |        |        |        |     INSERT t4     |
-#     |       |        |        |  <wait for locks>          |
+#     |       |        |        |        |    #INSERT t4     |
+#     |       |        |        |    show status  |          |
 #     |       |      COMMIT     |        |        |          |
-#     |       |        |        |  <wait for locks>          |
-#     |       |        |        |  lock("backup_commit_blocker");
-#     |       |        |        |  <wait for locks>          |
+#     |       |        |        |    show status  |          |
 #     |       |        |      BEGIN      |        |          |
-#     |       |        |        |  <wait for locks>          |
+#     |       |        |        |    show status  |          |
 #     |       |        |        |        |        |      (results)
 #     |       |        |        |        |        |       DELETE t5
-#     |       |        |        |  <wait for locks>          |
-#     |       |        |        |  <release locks>|          |
+#     |       |        |        |    show status  |          |
+#     |       |        |        |     wake all    |          |
 #     |    DELETE t1   |        |        |        |          |
 #     |     COMMIT     |        |        |        |          |
 #     |       |      <...>      |        |        |          |
@@ -598,14 +546,6 @@ BEGIN;
   INSERT INTO bup_commit_blocker.t2 VALUES ("con3: 04 Some data to test");
   INSERT INTO bup_commit_blocker.t2 VALUES ("con3: 05 Some data to test");
 
-connection con5;
-
-# Set the breakpoint for the commit blocker.
---echo con5: Getting lock on commit blocker.
-SELECT get_lock("commit_blocker_step_1", 0);
-
-# Start the backup and allow it to break on lock.
-
 connection con1;
 
 #
@@ -613,137 +553,113 @@ connection con1;
 # We stop (with the lock) the backup after the metadata but before the
 # commit blocker.
 #
+--echo con1: Activate synchronization points for BACKUP.
+SET DEBUG_SYNC= 'before_commit_block SIGNAL bup_commit_block
+                 WAIT_FOR bup_go_read_lock';
+SET DEBUG_SYNC= 'wait_protect_global_read_lock SIGNAL bup_read_lock';
+SET DEBUG_SYNC= 'before_backup_unblock_commit SIGNAL bup_unblocking
+                 WAIT_FOR finish';
 --echo con1: Backing up database -- will block with lock
 send BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak";
 
-connection con6;
-
+#connection con6;
+#
+#--echo con6: Activate synchronization point for INSERT.
+#SET DEBUG_SYNC= 'after_insert_locked_tables SIGNAL insert_table_locked
+#                 WAIT_FOR finish';
 #--echo con6: Starting non-trx in progress -- will block
 #--echo Assumption (d): non-TRX in progress is included in backup
 #send INSERT INTO bup_commit_blocker.t4 VALUES (31), (32), (33);
 
 connection con5;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "debug_sync_point: commit_blocker_step_1"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
+--echo con5: Wait for BACKUP to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_commit_block';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 
-# Wait for lock to be acquired and execution to reach breakpoint
-#--echo con5: Checking lock
-#let $wait_condition = SELECT state = "debug_sync_point: commit_blocker_step_1"
-#                      FROM INFORMATION_SCHEMA.PROCESSLIST
-#                      WHERE info LIKE "INSERT INTO bup_commit_blocker.t4%";
-#--source include/wait_condition.inc
+#--echo con5: Wait for INSERT to reach its synchronization point.
+#SET DEBUG_SYNC= 'now WAIT_FOR insert_table_locked';
+#SELECT state, info FROM
+#INFORMATION_SCHEMA.PROCESSLIST
+#WHERE info LIKE "BACKUP DATABASE%";
 
 connection con3;
 
---echo con3: Starting commit -- will block with lock
+--echo con3: Activate synchronization points for COMMIT.
+SET DEBUG_SYNC= 'within_ha_commit_trans SIGNAL commit_read_locked
+                 WAIT_FOR commit_go_done';
+SET DEBUG_SYNC= 'after_commit WAIT_FOR finish';
+--echo con3: Starting commit -- will block on sync point
 send COMMIT;
 
 connection con5;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "debug_sync_point: commit_blocker_step_1"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "COMMIT%";
---source include/wait_condition.inc
-
+--echo con5: Wait for COMMIT to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR commit_read_locked';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "COMMIT%";
 
-# Set the breakpoint for the commit blocker.
---echo con5: Getting lock on commit blocker.
-SELECT get_lock("backup_commit_blocker", 0);
-
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "debug_sync_point: backup_commit_blocker"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
+--echo con5: Let BACKUP run until the next sync point.
+SET DEBUG_SYNC= 'now SIGNAL bup_go_read_lock WAIT_FOR bup_read_lock';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "debug_sync_point: backup_commit_blocker"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "COMMIT%";
---source include/wait_condition.inc
-
+--echo con5: Let COMMIT continue until the sync point at its end.
+--echo con5: The completed COMMIT implicitly wakes BACKUP.
+--echo con5: So wait for BACKUP to reach the next synchronization point.
+SET DEBUG_SYNC= 'now SIGNAL commit_go_done WAIT_FOR bup_unblocking';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "COMMIT%";
+SELECT state, info FROM
+INFORMATION_SCHEMA.PROCESSLIST
+WHERE info LIKE "BACKUP DATABASE%";
 
 connection con4;
 
+--echo con4: Activate synchronization point for BEGIN.
+SET DEBUG_SYNC= 'before_begin_trans SIGNAL begin_starting
+                 WAIT_FOR finish';
 --echo con4: Starting begin -- will block with lock
 --echo Assumption (c): TRX not started is not included in backup
 send BEGIN;
 
 connection con5;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "debug_sync_point: backup_commit_blocker"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BEGIN%";
---source include/wait_condition.inc
-
+--echo con5: Wait for BEGIN to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR begin_starting';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BEGIN%";
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-
-let $wait_condition = SELECT state = "debug_sync_point: backup_commit_blocker"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
-SELECT state, info FROM
-INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "BACKUP DATABASE%";
-
 connection con7;
 
 --echo con7: Show that the statement in progress has executed before backup.
 #SELECT * FROM bup_commit_blocker.t4;
 SELECT * FROM bup_commit_blocker.t5;
 
+--echo con7: Activate synchronization point for DELETE.
+SET DEBUG_SYNC= 'wait_if_global_read_lock SIGNAL del_read_lock';
 --echo con7: Starting non-trx about to start -- will block with lock
 --echo Assumption (e): non-TRX not started is not included in backup
 send DELETE FROM bup_commit_blocker.t5 WHERE col_a = 50;
 
 connection con5;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "Waiting for release of readlock"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "DELETE%";
---source include/wait_condition.inc
-
+--echo con5: Wait for DELETE to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR del_read_lock';
 SELECT state, info FROM
 INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "DELETE%";
 
---echo con5: Releasing lock
-SELECT release_lock("backup_commit_blocker");
+--echo con5: Sending finish signal to wake them all.
+SET DEBUG_SYNC= 'now SIGNAL finish';
 
-# Reconnect to con2, con3, con4, con6, and con7 and allow them to finish.
+# Reconnect to con2, con3, con4, con6, and con7 and fetch their results.
 
 connection con2;
 
@@ -752,10 +668,13 @@ connection con2;
 COMMIT;
 
 connection con3;
---echo con3: Completing transaction
+
+--echo con3: Fetch COMMIT result
 reap;
 
 connection con4;
+
+--echo con4: Fetch BEGIN result and completing transaction
 reap;
   UPDATE bup_commit_blocker.t3 SET col_a = "con4: 05 CHANGED" WHERE col_a LIKE '05%';
   UPDATE bup_commit_blocker.t3 SET col_a = "con4: 06 CHANGED" WHERE col_a LIKE '06%';
@@ -763,17 +682,17 @@ COMMIT;
 
 connection con6;
 
-#--echo con6: Completing statement
+#--echo con6: Fetch INSERT result
 #reap;
 
 connection con7;
 
---echo con7: Completing statement
+--echo con7: Fetch DELETE result
 reap;
 
-# Reconnect to con1 and let backup finish.
-
 connection con1;
+
+--echo con1: Fetch BACKUP result
 --replace_column 1 #
 reap;
 
@@ -829,5 +748,5 @@ SELECT count(*) FROM bup_commit_blocker.
 DROP DATABASE bup_commit_blocker;
 
 remove_file $MYSQLTEST_VARDIR/master-data/bup_commit_blocker.bak;
-
+SET DEBUG_SYNC= 'RESET';
 
diff -Nrup a/mysql-test/t/backup_ddl_blocker.test b/mysql-test/t/backup_ddl_blocker.test
--- a/mysql-test/t/backup_ddl_blocker.test	2008-05-23 17:27:24 +02:00
+++ b/mysql-test/t/backup_ddl_blocker.test	2008-06-05 21:17:52 +02:00
@@ -90,21 +90,20 @@ connection con1;
 # when the backup or restore is already running. Tests results
 # show the realization of the assumptions above.
 #
-#     con1      con2     con3     con4     con6
+#     con1      con2     con3     con4     con5     con6
 #    (setup)     |        |        |        |        |
 #       |        |        |        |        |        |
-#       |        |        |        |        | lock("DDL_in_progress");
+#       |        |        |        |        |        |
 #       |   statememt 1   |        |        |        |
 #       |        |   statement 2   |        |        |
-#       |        |        |        |        |  <wait for locks>
+#       |        |        |        |        |    show status
 # BACKUP/RESTORE |        |        |        |        |
-#       |        |        |        |        | lock("DDL_blocked");
-#       |        |        |        |        | <wait for locks>
+#       |        |        |        |        |        |
+#       |        |        |        |        |        |
 #       |      <...>    <...>      |        |        |
 #       |        |        |   statement 3   |        |
 #       |        |        |        |   statement 4   |
-#       |        |        |        |        | <wait for DDL blocker>
-#       |        |        |        |        |  <release locks>
+#       |        |        |        |        |    show status
 #     <...>      |        |      <...>    <...>      |
 #   (results)    |        |        |        |        |
 #
diff -Nrup a/mysql-test/t/backup_snapshot.test b/mysql-test/t/backup_snapshot.test
--- a/mysql-test/t/backup_snapshot.test	2008-05-22 17:03:10 +02:00
+++ b/mysql-test/t/backup_snapshot.test	2008-06-05 21:17:52 +02:00
@@ -147,7 +147,7 @@ SET DEBUG_SYNC= 'now WAIT_FOR reading';
 # the backup is released.
 
 --echo con2: Activate sync points for the insert statement.
-SET DEBUG_SYNC= 'wait_if_global_read_lock SIGNAL inserting';
+SET DEBUG_SYNC= 'after_insert_locked_tables SIGNAL inserting';
 
 # Insert will wait in wait_if_global_read_lock() until backup is done.
 INSERT INTO bup_snapshot.t1 VALUES("- Dave Mathews");
diff -Nrup a/mysql-test/t/disabled.def b/mysql-test/t/disabled.def
--- a/mysql-test/t/disabled.def	2008-05-23 17:27:24 +02:00
+++ b/mysql-test/t/disabled.def	2008-06-05 21:17:52 +02:00
@@ -23,7 +23,7 @@ status               : Bug#32966 main.st
 ps_ddl               : Bug#12093 2007-12-14 pending WL#4165 / WL#4166
 user_limits          : Bug#23921 2007-12-16 random failure of user_limits.test
 backup                :BUG#34235 pending replacement of test facility with WL#4259
-backup_commit_blocker :BUG#34235 pending replacement of test facility with WL#4259
+#backup_commit_blocker :BUG#34235 pending replacement of test facility with WL#4259
 #backup_ddl_blocker    :BUG#34235 pending replacement of test facility with WL#4259
 #backup_progress       :BUG#34235 pending replacement of test facility with WL#4259
 #backup_security       :BUG#34235 pending replacement of test facility with WL#4259
diff -Nrup a/sql/backup/data_backup.cc b/sql/backup/data_backup.cc
--- a/sql/backup/data_backup.cc	2008-05-22 14:12:57 +02:00
+++ b/sql/backup/data_backup.cc	2008-06-05 21:17:53 +02:00
@@ -409,7 +409,7 @@ int block_commits(THD *thd, TABLE_LIST *
   /*
     Step 1 - global read lock.
   */
-  BACKUP_BREAKPOINT("commit_blocker_step_1");
+  DEBUG_SYNC(thd, "before_commit_block");
   if (lock_global_read_lock(thd))
     DBUG_RETURN(1);
 
@@ -642,15 +642,15 @@ int write_table_data(THD* thd, Backup_in
     */
     vp_time= my_time(0);
 
-    BACKUP_BREAKPOINT("commit_blocker_step_4");
     BACKUP_BREAKPOINT("data_unlock");
+    DEBUG_SYNC(thd, "before_backup_data_unlock");
     if (sch.unlock())
       goto error;
 
     /*
       Unblock commits.
     */
-    BACKUP_BREAKPOINT("backup_commit_blocker");
+    DEBUG_SYNC(thd, "before_backup_unblock_commit");
     error= unblock_commits(thd);
     if (error)
       goto error;
diff -Nrup a/sql/debug_sync.cc b/sql/debug_sync.cc
--- a/sql/debug_sync.cc	2008-04-29 11:22:02 +02:00
+++ b/sql/debug_sync.cc	2008-06-05 21:17:52 +02:00
@@ -259,9 +259,9 @@ struct st_debug_sync_globals
 static st_debug_sync_globals debug_sync_global; /* All globals in one object */
 
 /**
-  Callback pointer from thr_lock.cc
+  Callback pointer from thr_lock.c
 */
-extern void (*debug_sync_wait_for_lock_callback_ptr)(void);
+extern "C" void (*debug_sync_wait_for_lock_callback_ptr)(void);
 
 
 /**
@@ -815,7 +815,7 @@ static st_debug_sync_action *debug_sync_
   DBUG_ASSERT(name_len);
   DBUG_ASSERT(ds_control);
   DBUG_PRINT("debug_sync", ("sync_point: '%.*s'", (int) name_len, dsp_name));
-  DBUG_PRINT("debug_sync", ("active: %lu  allocated: %lu",
+  DBUG_PRINT("debug_sync", ("active: %u  allocated: %u",
                             ds_control->ds_active, ds_control->ds_allocated));
 
   /* There cannot be more active actions than allocated. */
@@ -1562,15 +1562,24 @@ static void debug_sync_execute(THD *thd,
   {
     action->execute--;
 
+    /*
+      Protect copying of the signal string to the global string
+      to avoid race conditions during test case development.
+      After approaching a clean test case it should not happen
+      that two threads try to signal at the same time.
+
+      Do also acquire the mutex for a WAIT_FOR action. The sense is to
+      clamp SIGNAL and WAIT_FOR in the mutex. If we wake another thread
+      with the signal, it should not run until we set PROC_INFO in
+      enter_cond().
+
+      Note. When 'execute' is non-zero, at least one of SIGNAL, WAIT_FOR
+      is set.
+    */
+    pthread_mutex_lock(&debug_sync_global.ds_mutex);
+
     if (action->signal.length())
     {
-      /*
-        Protect copying of the signal string to the global string
-        to avoid race conditions during test case development.
-        After approaching a clean test case it should not happen
-        that two threads try to signal at the same time.
-      */
-      pthread_mutex_lock(&debug_sync_global.ds_mutex);
       /* Copy the signal to the global variable. */
       if (debug_sync_global.ds_signal.copy(action->signal))
       {
@@ -1585,8 +1594,6 @@ static void debug_sync_execute(THD *thd,
       DBUG_PRINT("debug_sync_exec", ("signal '%s'  at: '%s'",
                                      action->signal.c_ptr(),
                                      action->sync_point.c_ptr()));
-      pthread_mutex_unlock(&debug_sync_global.ds_mutex);
-
     } /* end if (action->signal.length()) */
 
     if (action->wait_for.length())
@@ -1594,11 +1601,13 @@ static void debug_sync_execute(THD *thd,
       const char      *old_proc_info;
       int             error= 0;
       struct timespec abstime;
+      String          proc_info;
 
-      pthread_mutex_lock(&debug_sync_global.ds_mutex);
+      proc_info.set("debug sync point: ", 18, system_charset_info);
+      proc_info.append(action->sync_point);
       old_proc_info= thd->enter_cond(&debug_sync_global.ds_cond,
                                      &debug_sync_global.ds_mutex,
-                                     action->sync_point.c_ptr());
+                                     proc_info.c_ptr());
 
       set_timespec(abstime, action->timeout);
       DBUG_PRINT("debug_sync_exec", ("wait for '%s'  at: '%s'  curr: '%s'",
@@ -1631,9 +1640,15 @@ static void debug_sync_execute(THD *thd,
                                      action->wait_for.c_ptr(),
                                      action->sync_point.c_ptr()));
 
+      /* exit_cond() does also unlock the mutex. */
       thd->exit_cond(old_proc_info);
 
     } /* end if (action->wait_for.length()) */
+    else
+    {
+      /* Need explicit unlock of mutex as we don't use exit_cond() here. */
+      pthread_mutex_unlock(&debug_sync_global.ds_mutex);
+    }
 
   } /* end if (action->execute) */
 
diff -Nrup a/sql/handler.cc b/sql/handler.cc
--- a/sql/handler.cc	2008-04-07 17:26:37 +02:00
+++ b/sql/handler.cc	2008-06-05 21:17:52 +02:00
@@ -1091,7 +1091,7 @@ int ha_commit_trans(THD *thd, bool all)
     /*
       Breakpoints for backup testing.
     */
-    BACKUP_BREAKPOINT("commit_blocker_step_1");
+    DEBUG_SYNC(thd, "within_ha_commit_trans");
     DBUG_EXECUTE_IF("crash_commit_before", abort(););
 
     /* Close all cursors that can not survive COMMIT */
diff -Nrup a/sql/lock.cc b/sql/lock.cc
--- a/sql/lock.cc	2008-05-22 17:03:10 +02:00
+++ b/sql/lock.cc	2008-06-05 21:17:53 +02:00
@@ -1424,6 +1424,19 @@ bool lock_global_read_lock(THD *thd)
   {
     const char *old_message;
     (void) pthread_mutex_lock(&LOCK_global_read_lock);
+
+#if defined(ENABLED_DEBUG_SYNC)
+    /*
+      The below sync point fires if we have to wait for
+      protect_against_global_read_lock. Beware to use WAIT_FOR with this
+      sync point. We hold LOCK_global_read_lock here.
+      Call the sync point before calling enter_cond() as it will call it
+      itself if WAIT_FOR is used anyhow.
+    */
+    if (protect_against_global_read_lock)
+      DEBUG_SYNC(thd, "wait_protect_global_read_lock");
+#endif /* defined(ENABLED_DEBUG_SYNC) */
+
     old_message=thd->enter_cond(&COND_global_read_lock, &LOCK_global_read_lock,
                                 "Waiting to get readlock");
     DBUG_PRINT("info",
@@ -1497,7 +1510,6 @@ bool wait_if_global_read_lock(THD *thd, 
     deadlock.
   */
   safe_mutex_assert_not_owner(&LOCK_open);
-  DEBUG_SYNC(thd, "wait_if_global_read_lock");
 
   (void) pthread_mutex_lock(&LOCK_global_read_lock);
   if ((need_exit_cond= must_wait))
@@ -1515,6 +1527,19 @@ bool wait_if_global_read_lock(THD *thd, 
       */
       DBUG_RETURN(is_not_commit);
     }
+
+#if defined(ENABLED_DEBUG_SYNC)
+    /*
+      The below sync point fires if we have to wait for
+      global_read_lock. Beware to use WAIT_FOR with this
+      sync point. We hold LOCK_global_read_lock here.
+      Call the sync point before calling enter_cond() as it will call it
+      itself if WAIT_FOR is used anyhow.
+    */
+    if (must_wait)
+      DEBUG_SYNC(thd, "wait_if_global_read_lock");
+#endif /* defined(ENABLED_DEBUG_SYNC) */
+
     old_message=thd->enter_cond(&COND_global_read_lock, &LOCK_global_read_lock,
 				"Waiting for release of readlock");
     while (must_wait && ! thd->killed &&
@@ -1528,7 +1553,11 @@ bool wait_if_global_read_lock(THD *thd, 
       result=1;
   }
   if (!abort_on_refresh && !result)
+  {
     protect_against_global_read_lock++;
+    DBUG_PRINT("sql_lock", ("protect_against_global_read_lock incr: %u",
+                            protect_against_global_read_lock));
+  }
   /*
     The following is only true in case of a global read locks (which is rare)
     and if old_message is set
@@ -1550,6 +1579,8 @@ void start_waiting_global_read_lock(THD 
   (void) pthread_mutex_lock(&LOCK_global_read_lock);
   tmp= (!--protect_against_global_read_lock &&
         (waiting_for_read_lock || global_read_lock_blocks_commit));
+  DBUG_PRINT("sql_lock", ("protect_against_global_read_lock decr: %u",
+                          protect_against_global_read_lock));
   (void) pthread_mutex_unlock(&LOCK_global_read_lock);
   if (tmp)
     pthread_cond_broadcast(&COND_global_read_lock);
diff -Nrup a/sql/sql_delete.cc b/sql/sql_delete.cc
--- a/sql/sql_delete.cc	2008-04-14 12:10:01 +02:00
+++ b/sql/sql_delete.cc	2008-06-05 21:17:53 +02:00
@@ -400,13 +400,7 @@ cleanup:
   DBUG_ASSERT(transactional_table || !deleted || thd->transaction.stmt.modified_non_trans_table);
   free_underlaid_joins(thd, select_lex);
 
-  /*
-    Breakpoints for backup testing.
-  */
-  if (!table->file->has_transactions())
-  {
-    BACKUP_BREAKPOINT("backup_commit_blocker");
-  }
+  DEBUG_SYNC(thd, "at_delete_end");
 
   MYSQL_DELETE_END();
   if (error < 0 || (thd->lex->ignore && !thd->is_fatal_error))
diff -Nrup a/sql/sql_insert.cc b/sql/sql_insert.cc
--- a/sql/sql_insert.cc	2008-04-21 12:20:17 +02:00
+++ b/sql/sql_insert.cc	2008-06-05 21:17:53 +02:00
@@ -620,8 +620,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *t
   /*
     Breakpoints for backup testing.
   */
-  BACKUP_BREAKPOINT("backup_cs_reading");
-  BACKUP_BREAKPOINT("commit_blocker_step_1");
+  DEBUG_SYNC(thd, "after_insert_locked_tables");
   thd_proc_info(thd, "init");
   thd->used_tables=0;
   values= its++;
diff -Nrup a/sql/sql_parse.cc b/sql/sql_parse.cc
--- a/sql/sql_parse.cc	2008-05-05 21:33:24 +02:00
+++ b/sql/sql_parse.cc	2008-06-05 21:17:53 +02:00
@@ -3849,7 +3849,7 @@ end_with_restore_list:
     /*
       Breakpoints for backup testing.
     */
-    BACKUP_BREAKPOINT("backup_commit_blocker");
+    DEBUG_SYNC(thd, "before_begin_trans");
     if (begin_trans(thd))
       goto error;
     my_ok(thd);
@@ -3861,7 +3861,7 @@ end_with_restore_list:
     /*
       Breakpoints for backup testing.
     */
-    BACKUP_BREAKPOINT("backup_commit_blocker");
+    DEBUG_SYNC(thd, "after_commit");
     my_ok(thd);
     break;
   case SQLCOM_ROLLBACK:
Thread
bk commit into 6.0 tree (istruewing:1.2627) WL#4259Ingo Struewing5 Jun