List:Commits« Previous MessageNext Message »
From:Ingo Struewing Date:June 25 2008 3:39pm
Subject:bzr commit into mysql-6.0-backup branch (ingo.struewing:2640) Bug#34235,
WL#4259
View as plain text  
#At file:///home2/mydev/bzrroot/mysql-6.0-backup/

 2640 Ingo Struewing	2008-06-25
      Bug#34235 - Random failure of wait_condition.inc
                  with information_schema.processlist
      
      Changed synchronization point calls.
      Adapted backup test cases and re-enabled them.
      Removed all unused BACKUP_BREAKPOINTs. None is left.
      Removed sql/backup/debug.h as it is now obsolete.
      Removed inclusion of debug.h from many files.
      Cleaned mysql-test/t/disabled.def.
      
      Fixed some random failures of wait_condition.inc with
      information_schema.processlist.
      
      Small fixes of the 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.
removed:
  sql/backup/debug.h
modified:
  mysql-test/lib/mtr_report.pl
  mysql-test/r/backup.result
  mysql-test/r/backup_commit_blocker.result
  mysql-test/r/backup_ddl_blocker.result
  mysql-test/r/backup_progress.result
  mysql-test/r/backup_snapshot.result
  mysql-test/r/backup_view_on_view.result
  mysql-test/r/character_set_server_func.result
  mysql-test/t/backup.test
  mysql-test/t/backup_commit_blocker.test
  mysql-test/t/backup_ddl_blocker.test
  mysql-test/t/backup_many_dbs.test
  mysql-test/t/backup_multi_blocks.test
  mysql-test/t/backup_no_be.test
  mysql-test/t/backup_progress.test
  mysql-test/t/backup_security.test
  mysql-test/t/backup_snapshot.test
  mysql-test/t/backup_view_on_view.test
  mysql-test/t/character_set_server_func.test
  mysql-test/t/disabled.def
  sql/backup/Makefile.am
  sql/backup/backup_test.cc
  sql/backup/be_default.cc
  sql/backup/be_snapshot.cc
  sql/backup/data_backup.cc
  sql/backup/kernel.cc
  sql/backup/logger.h
  sql/backup/stream.h
  sql/ddl_blocker.cc
  sql/ddl_blocker.h
  sql/debug_sync.cc
  sql/handler.cc
  sql/lock.cc
  sql/sql_delete.cc
  sql/sql_insert.cc
  sql/sql_parse.cc

per-file messages:
  mysql-test/lib/mtr_report.pl
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Added intentionally provoked errors to the ignore list.
  mysql-test/r/backup.result
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Changed result.
  mysql-test/r/backup_commit_blocker.result
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Changed result.
  mysql-test/r/backup_ddl_blocker.result
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Changed result.
  mysql-test/r/backup_progress.result
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Changed result.
  mysql-test/r/backup_snapshot.result
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Changed result.
  mysql-test/r/backup_view_on_view.result
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Changed result.
  mysql-test/r/character_set_server_func.result
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Changed result.
  mysql-test/t/backup.test
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Changed test case.
  mysql-test/t/backup_commit_blocker.test
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Changed test case.
  mysql-test/t/backup_ddl_blocker.test
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Changed test case.
  mysql-test/t/backup_many_dbs.test
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Removed unnecessary pre-conditions.
  mysql-test/t/backup_multi_blocks.test
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Removed an unnecessary precondition.
  mysql-test/t/backup_no_be.test
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Fixed a typo.
  mysql-test/t/backup_progress.test
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Changed test case.
  mysql-test/t/backup_security.test
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Removed unnecessary wait conditions.
    Removed unnecessary connection selections.
    Beautified test case by shifting lines.
  mysql-test/t/backup_snapshot.test
    mysql-test/t/backup_snapshot.test
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Changed test case.
  mysql-test/t/backup_view_on_view.test
    mysql-test/t/backup_snapshot.test
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Added cleanup.
  mysql-test/t/character_set_server_func.test
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Added preparatory cleanup.
  mysql-test/t/disabled.def
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Removed all converted test cases from the disabled list.
  sql/backup/Makefile.am
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Removed obolete header file.
  sql/backup/backup_test.cc
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Fixed a copy-n-paste slip.
  sql/backup/be_default.cc
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Removed inclusion of obsolete header file.
    Changed a synchronization point call.
  sql/backup/be_snapshot.cc
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Removed inclusion of obsolete header file.
    Removed unused breakpoint.
    Changed synchronization point calls.
  sql/backup/data_backup.cc
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Removed inclusion of obsolete header file.
    Removed unused breakpoints.
    Changed synchronization point calls.
  sql/backup/debug.h
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Removed obsolete file.
  sql/backup/kernel.cc
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Removed inclusion of obsolete header file.
    Removed unused breakpoints.
    Changed synchronization point calls.
  sql/backup/logger.h
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Added inclusion of the DEBUG_SYNC declaration.
    Removed inclusion of obsolete header file.
    Changed a synchronization point call.
  sql/backup/stream.h
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
    Removed inclusion of obsolete header file.
  sql/ddl_blocker.cc
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Changed synchronization point calls.
    Removed unused breakpoint.
  sql/ddl_blocker.h
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Removed inclusion of obsolete header file.
  sql/debug_sync.cc
    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
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Removed inclusion of obsolete header file.
    Changed a synchronization point call.
  sql/lock.cc
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Added new synchronization points.
    Added DBUG_PRINTs.
  sql/sql_delete.cc
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Removed inclusion of obsolete header file.
    Changed a synchronization point call.
  sql/sql_insert.cc
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Removed inclusion of obsolete header file.
    Changed a synchronization point call.
  sql/sql_parse.cc
    Bug#34235 - Random failure of wait_condition.inc
                with information_schema.processlist
    Removed inclusion of obsolete header file.
    Changed synchronization point calls.
=== modified file 'mysql-test/lib/mtr_report.pl'
--- a/mysql-test/lib/mtr_report.pl	2008-06-23 14:53:35 +0000
+++ b/mysql-test/lib/mtr_report.pl	2008-06-25 13:39:04 +0000
@@ -348,6 +348,8 @@ sub mtr_report_stats ($) {
 		
 		# ignore warning generated when backup engine selection algorithm is tested
 		($testname eq 'main.backup_no_be') and /Backup: Cannot create backup engine/ or
+		# ignore warnings generated when backup privilege is tested
+		($testname eq 'main.backup_security') and /(Backup|Restore): Access denied; you need
the SUPER/ or
 		
 		/Sort aborted/ or
 		/Time-out in NDB/ or

=== modified file 'mysql-test/r/backup.result'
--- a/mysql-test/r/backup.result	2008-06-12 19:54:19 +0000
+++ b/mysql-test/r/backup.result	2008-06-25 13:39:04 +0000
@@ -1,4 +1,4 @@
-SET GLOBAL debug="d,backup_debug:d,backup";
+SET DEBUG_SYNC= 'RESET';
 DROP DATABASE IF EXISTS db1;
 DROP DATABASE IF EXISTS db2;
 DROP DATABASE IF EXISTS db3;
@@ -42,14 +42,13 @@ CREATE TABLE `tasking` (
 LOCK TABLES `tasking` WRITE;
 INSERT INTO `tasking` VALUES
('333445555','405',23),('123763153','405',33.5),('921312388','601',44),('800122337','300',13),('820123637','300',9.5),('830132335','401',8.5),('333445555','300',11),('921312388','500',13),('800122337','300',44),('820123637','401',500.5),('830132335','400',12),('333445665','600',300.25),('123654321','607',444.75),('123456789','300',1000);
 UNLOCK TABLES;
-breakpoints: Getting lock "locking_thread_added"
-SELECT get_lock("locking_thread_added", 100);
-get_lock("locking_thread_added", 100)
-1
+backup: Activate synchronization points for BACKUP.
+SET DEBUG_SYNC= 'locking_thread_added SIGNAL bup_thread_added
+                 WAIT_FOR finish';
 backup: Send the backup command.
 BACKUP DATABASE db1,db2 TO 'test.ba';
-breakpoints: Check for lock in process list.
-breakpoints: Checking locks.
+breakpoints: Wait for BACKUP to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_thread_added';
 SELECT id, command, state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%" OR info LIKE "default driver locking thread%";
 id	#
@@ -58,12 +57,10 @@ state	Locking thread: holding table lock
 info	default driver locking thread
 id	#
 command	Query
-state	debug_sync_point: locking_thread_added
+state	debug sync point: locking_thread_added
 info	BACKUP DATABASE db1,db2 TO 'test.ba'
-breakpoints: Release lock
-SELECT release_lock("locking_thread_added");
-release_lock("locking_thread_added")
-1
+breakpoints: Sending finish signal to wake BACKUP.
+SET DEBUG_SYNC= 'now SIGNAL finish';
 backup_id
 #
 DROP DATABASE db1;
@@ -134,6 +131,7 @@ tasking	CREATE TABLE `tasking` (
 DROP DATABASE db1;
 DROP DATABASE db2;
 DROP DATABASE db3;
+SET DEBUG_SYNC= 'RESET';
 DROP DATABASE IF EXISTS bup_default;
 CREATE DATABASE bup_default;
 CREATE TABLE bup_default.wide (

=== modified file 'mysql-test/r/backup_commit_blocker.result'
--- a/mysql-test/r/backup_commit_blocker.result	2007-12-04 17:38:12 +0000
+++ b/mysql-test/r/backup_commit_blocker.result	2008-06-25 13:39:04 +0000
@@ -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_lock_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_lock_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';

=== modified file 'mysql-test/r/backup_ddl_blocker.result'
--- a/mysql-test/r/backup_ddl_blocker.result	2007-12-20 20:32:22 +0000
+++ b/mysql-test/r/backup_ddl_blocker.result	2008-06-25 13:39:04 +0000
@@ -1,4 +1,4 @@
-SET GLOBAL debug="d,backup_debug:d,backup";
+SET DEBUG_SYNC= 'reset';
 
 Starting Test 1 - Backup
 
@@ -23,54 +23,67 @@ INSERT INTO bup_ddl_blocker.t4 VALUES ("
 INSERT INTO bup_ddl_blocker.t4 VALUES ("02 Some data to test");
 INSERT INTO bup_ddl_blocker.t4 VALUES ("03 Some data to test");
 DROP TABLE bup_ddl_blocker.t1, bup_ddl_blocker.t3;
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 con2: Get a DDL going and stop in the middle
 CREATE TABLE bup_ddl_blocker.t1 (col_a CHAR(40)) ENGINE=INNODB;
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 con3: Get a DDL going and stop in the middle
 ALTER TABLE bup_ddl_blocker.t2 ADD COLUMN col_b int;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 con1: Backing up database -- will block with lock
 BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 state	info
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	ALTER TABLE bup_ddl_blocker.t2 ADD COLUMN col_b int
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+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
-debug_sync_point: DDL_blocked	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';
 con4: Try a DDL but it is blocked by backup -- will not be in backup
 CREATE TABLE bup_ddl_blocker.t3 (col_a CHAR(40)) ENGINE=INNODB;
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 con5: Try a DDL but it is blocked by backup -- will not be in backup
 ALTER TABLE bup_ddl_blocker.t4 ADD COLUMN col_b int;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
 state	info
-DDL blocker: DDL is 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
-DDL blocker: DDL is blocked	ALTER TABLE bup_ddl_blocker.t4 ADD COLUMN col_b int
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+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
 con3: Completing DDL
 con4: Completing DDL
@@ -144,54 +157,67 @@ DROP TABLE bup_ddl_blocker.t1, bup_ddl_b
 BACKUP DATABASE bup_ddl_blocker to 'bup_ddl_blocker_orig.bak';
 backup_id
 #
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 con2: Get a DDL going and stop in the middle
 CREATE TABLE bup_ddl_blocker.t1 (col_a CHAR(40)) ENGINE=INNODB;
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 con3: Get a DDL going and stop in the middle
 ALTER TABLE bup_ddl_blocker.t2 ADD COLUMN col_b int;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 con1: Restoring database -- will block with lock
 RESTORE FROM "bup_ddl_blocker_orig.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RESTORE FROM%";
 state	info
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	ALTER TABLE bup_ddl_blocker.t2 ADD COLUMN col_b int
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+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
-debug_sync_point: DDL_blocked	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';
 con4: Try a DDL but it is blocked by backup -- will not be in backup
 CREATE TABLE bup_ddl_blocker.t3 (col_a CHAR(40)) ENGINE=INNODB;
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 con5: Try a DDL but it is blocked by backup -- will not be in backup
 ALTER TABLE bup_ddl_blocker.t4 ADD COLUMN col_b int;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
 state	info
-DDL blocker: DDL is 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
-DDL blocker: DDL is blocked	ALTER TABLE bup_ddl_blocker.t4 ADD COLUMN col_b int
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+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
 con3: Completing DDL
 con4: Completing DDL
@@ -240,54 +266,67 @@ INSERT INTO bup_ddl_blocker.t3 VALUES ("
 INSERT INTO bup_ddl_blocker.t4 VALUES ("01 Some data to test");
 INSERT INTO bup_ddl_blocker.t4 VALUES ("02 Some data to test");
 INSERT INTO bup_ddl_blocker.t4 VALUES ("03 Some data to test");
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 con2: Get a DDL going and stop in the middle
 RENAME TABLE bup_ddl_blocker.t1 TO bup_ddl_blocker.t01;
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 con3: Get a DDL going and stop in the middle
 REPAIR TABLE bup_ddl_blocker.t2;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 con1: Backing up database -- will block with lock
 BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 state	info
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	REPAIR TABLE bup_ddl_blocker.t2
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+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
-debug_sync_point: DDL_blocked	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';
 con4: Try a DDL but it is blocked by backup -- will not be in backup
 RENAME TABLE bup_ddl_blocker.t3 TO bup_ddl_blocker.t03;
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 con5: Try a DDL but it is blocked by backup -- will not be in backup
 REPAIR TABLE bup_ddl_blocker.t4;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
 state	info
-DDL blocker: DDL is 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
-DDL blocker: DDL is blocked	REPAIR TABLE bup_ddl_blocker.t4
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+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
 con3: Completing DDL
 Table	Op	Msg_type	Msg_text
@@ -352,54 +391,67 @@ INSERT INTO bup_ddl_blocker.t4 VALUES ("
 BACKUP DATABASE bup_ddl_blocker to 'bup_ddl_blocker_orig.bak';
 backup_id
 #
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 con2: Get a DDL going and stop in the middle
 RENAME TABLE bup_ddl_blocker.t1 TO bup_ddl_blocker.t01;
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 con3: Get a DDL going and stop in the middle
 REPAIR TABLE bup_ddl_blocker.t2;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 con1: Restoring database -- will block with lock
 RESTORE FROM "bup_ddl_blocker_orig.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RESTORE FROM%";
 state	info
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	REPAIR TABLE bup_ddl_blocker.t2
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+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
-debug_sync_point: DDL_blocked	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';
 con4: Try a DDL but it is blocked by backup -- will not be in backup
 RENAME TABLE bup_ddl_blocker.t3 TO bup_ddl_blocker.t03;
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 con5: Try a DDL but it is blocked by backup -- will not be in backup
 REPAIR TABLE bup_ddl_blocker.t4;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
 state	info
-DDL blocker: DDL is 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
-DDL blocker: DDL is blocked	REPAIR TABLE bup_ddl_blocker.t4
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+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
 con3: Completing DDL
 Table	Op	Msg_type	Msg_text
@@ -444,54 +496,67 @@ INSERT INTO bup_ddl_blocker.t3 VALUES ("
 INSERT INTO bup_ddl_blocker.t4 VALUES ("01 Some data to test");
 INSERT INTO bup_ddl_blocker.t4 VALUES ("02 Some data to test");
 INSERT INTO bup_ddl_blocker.t4 VALUES ("03 Some data to test");
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 con2: Get a DDL going and stop in the middle
 OPTIMIZE TABLE bup_ddl_blocker.t1;
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 con3: Get a DDL going and stop in the middle
 DROP TABLE bup_ddl_blocker.t2;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 con1: Backing up database -- will block with lock
 BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 state	info
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	DROP TABLE bup_ddl_blocker.t2
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+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
-debug_sync_point: DDL_blocked	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';
 con4: Try a DDL but it is blocked by backup -- will not be in backup
 OPTIMIZE TABLE bup_ddl_blocker.t3;
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 con5: Try a DDL but it is blocked by backup -- will not be in backup
 DROP TABLE bup_ddl_blocker.t4;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
 state	info
-DDL blocker: DDL is 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
-DDL blocker: DDL is blocked	DROP TABLE bup_ddl_blocker.t4
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+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
 Table	Op	Msg_type	Msg_text
 bup_ddl_blocker.t1	optimize	status	OK
@@ -551,54 +616,67 @@ INSERT INTO bup_ddl_blocker.t4 VALUES ("
 BACKUP DATABASE bup_ddl_blocker to 'bup_ddl_blocker_orig.bak';
 backup_id
 #
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 con2: Get a DDL going and stop in the middle
 OPTIMIZE TABLE bup_ddl_blocker.t1;
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 con3: Get a DDL going and stop in the middle
 DROP TABLE bup_ddl_blocker.t2;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 con1: Restoring database -- will block with lock
 RESTORE FROM "bup_ddl_blocker_orig.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RESTORE FROM%";
 state	info
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	DROP TABLE bup_ddl_blocker.t2
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+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
-debug_sync_point: DDL_blocked	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';
 con4: Try a DDL but it is blocked by backup -- will not be in backup
 OPTIMIZE TABLE bup_ddl_blocker.t3;
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 con5: Try a DDL but it is blocked by backup -- will not be in backup
 DROP TABLE bup_ddl_blocker.t4;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
 state	info
-DDL blocker: DDL is 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
-DDL blocker: DDL is blocked	DROP TABLE bup_ddl_blocker.t4
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+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
 Table	Op	Msg_type	Msg_text
 bup_ddl_blocker.t1	optimize	status	OK
@@ -644,54 +722,67 @@ SHOW DATABASES LIKE 'bup_ddl_blocker_%';
 Database (bup_ddl_blocker_%)
 bup_ddl_blocker_2
 bup_ddl_blocker_4
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 con2: Get a DDL going and stop in the middle
 CREATE DATABASE bup_ddl_blocker_1;
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 con3: Get a DDL going and stop in the middle
 DROP DATABASE bup_ddl_blocker_2;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 con1: Backing up database -- will block with lock
 BACKUP DATABASE * TO "bup_ddl_blocker.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 state	info
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	DROP DATABASE bup_ddl_blocker_2
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+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
-debug_sync_point: DDL_blocked	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';
 con4: Try a DDL but it is blocked by backup -- will not be in backup
 CREATE DATABASE bup_ddl_blocker_3;
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 con5: Try a DDL but it is blocked by backup -- will not be in backup
 DROP DATABASE bup_ddl_blocker_4;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
 state	info
-DDL blocker: DDL is 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
-DDL blocker: DDL is blocked	DROP DATABASE bup_ddl_blocker_4
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+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
 con3: Completing DDL
 con4: Completing DDL
@@ -751,54 +842,67 @@ bup_ddl_blocker_4
 BACKUP DATABASE bup_ddl_blocker_2, bup_ddl_blocker_4 to 'bup_ddl_blocker_orig.bak';
 backup_id
 #
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 con2: Get a DDL going and stop in the middle
 CREATE DATABASE bup_ddl_blocker_1;
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 con3: Get a DDL going and stop in the middle
 DROP DATABASE bup_ddl_blocker_2;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 con1: Restoring database -- will block with lock
 RESTORE FROM "bup_ddl_blocker_orig.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RESTORE FROM%";
 state	info
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	DROP DATABASE bup_ddl_blocker_2
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+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
-debug_sync_point: DDL_blocked	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';
 con4: Try a DDL but it is blocked by backup -- will not be in backup
 CREATE DATABASE bup_ddl_blocker_3;
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 con5: Try a DDL but it is blocked by backup -- will not be in backup
 DROP DATABASE bup_ddl_blocker_4;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
 state	info
-DDL blocker: DDL is 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
-DDL blocker: DDL is blocked	DROP DATABASE bup_ddl_blocker_4
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+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
 con3: Completing DDL
 con4: Completing DDL
@@ -839,54 +943,67 @@ SHOW DATABASES LIKE 'bup_ddl_blocker_%';
 Database (bup_ddl_blocker_%)
 bup_ddl_blocker_2
 bup_ddl_blocker_4
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 con2: Get a DDL going and stop in the middle
 TRUNCATE TABLE bup_ddl_blocker_2.t1;
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 con3: Get a DDL going and stop in the middle
 ALTER DATABASE bup_ddl_blocker_2 CHARACTER SET latin2;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 con1: Backing up database -- will block with lock
 BACKUP DATABASE * TO "bup_ddl_blocker.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 state	info
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	ALTER DATABASE bup_ddl_blocker_2 CHARACTER SET latin2
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+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
-debug_sync_point: DDL_blocked	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';
 con4: Try a DDL but it is blocked by backup -- will not be in backup
 TRUNCATE TABLE bup_ddl_blocker_4.t1;
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 con5: Try a DDL but it is blocked by backup -- will not be in backup
 ALTER DATABASE bup_ddl_blocker_4 CHARACTER SET latin2;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
 state	info
-DDL blocker: DDL is 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
-DDL blocker: DDL is blocked	TRUNCATE TABLE bup_ddl_blocker_4.t1
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+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
 con3: Completing DDL
 con4: Completing DDL
@@ -975,54 +1092,67 @@ bup_ddl_blocker_4
 BACKUP DATABASE bup_ddl_blocker_2, bup_ddl_blocker_4 to 'bup_ddl_blocker_orig.bak';
 backup_id
 #
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 con2: Get a DDL going and stop in the middle
 TRUNCATE TABLE bup_ddl_blocker_2.t1;
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 con3: Get a DDL going and stop in the middle
 ALTER DATABASE bup_ddl_blocker_2 CHARACTER SET latin2;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 con1: Restoring database -- will block with lock
 RESTORE FROM "bup_ddl_blocker_orig.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RESTORE FROM%";
 state	info
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	TRUNCATE TABLE bup_ddl_blocker_2.t1
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+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
-debug_sync_point: DDL_blocked	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';
 con4: Try a DDL but it is blocked by backup -- will not be in backup
 TRUNCATE TABLE bup_ddl_blocker_4.t1;
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 con5: Try a DDL but it is blocked by backup -- will not be in backup
 ALTER DATABASE bup_ddl_blocker_4 CHARACTER SET latin2;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
 state	info
-DDL blocker: DDL is 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
-DDL blocker: DDL is blocked	ALTER DATABASE bup_ddl_blocker_4 CHARACTER SET latin2
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+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
 con3: Completing DDL
 con4: Completing DDL
@@ -1087,60 +1217,73 @@ INSERT INTO bup_ddl_blocker_4.t1 VALUES 
 INSERT INTO bup_ddl_blocker_4.t1 VALUES ("02 Some data to test", 12);
 INSERT INTO bup_ddl_blocker_4.t1 VALUES ("03 Some data to test", 3);
 CREATE INDEX 4t1col_b ON bup_ddl_blocker_4.t1 (col_b);
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 con2: Get a DDL going and stop in the middle
 CREATE INDEX 1t1col_b ON bup_ddl_blocker_1.t1 (col_b);
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 con3: Get a DDL going and stop in the middle
 DROP INDEX 2t1col_b ON bup_ddl_blocker_2.t1;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 con1: Backing up database -- will block with lock
 BACKUP DATABASE bup_ddl_blocker_1, bup_ddl_blocker_2,
 bup_ddl_blocker_3, bup_ddl_blocker_4
 TO "bup_ddl_blocker.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%";
 state	info
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	DROP INDEX 2t1col_b ON bup_ddl_blocker_2.t1
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+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
-debug_sync_point: DDL_blocked	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.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+                 WAIT_FOR status_shown2';
 con4: Try a DDL but it is blocked by backup -- will not be in backup
 CREATE INDEX 3t1col_b ON bup_ddl_blocker_3.t1 (col_b);
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 con5: Try a DDL but it is blocked by backup -- will not be in backup
 DROP INDEX 4t1col_b ON bup_ddl_blocker_4.t1;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "CREATE INDEX 3t1col_b%";
 state	info
-DDL blocker: DDL is 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
-DDL blocker: DDL is blocked	DROP INDEX 4t1col_b ON bup_ddl_blocker_4.t1
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+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
 con3: Completing DDL
 con4: Completing DDL
@@ -1265,57 +1408,67 @@ bup_ddl_blocker_3, bup_ddl_blocker_4
 TO "bup_ddl_blocker_orig.bak";
 backup_id
 #
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 con2: Get a DDL going and stop in the middle
 CREATE INDEX 1t1col_b ON bup_ddl_blocker_1.t1 (col_b);
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 con3: Get a DDL going and stop in the middle
 DROP INDEX 2t1col_b ON bup_ddl_blocker_2.t1;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 con1: Restoring database -- will block with lock
 RESTORE FROM "bup_ddl_blocker_orig.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "RESTORE FROM%";
 state	info
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	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
-debug_sync_point: DDL_in_progress	DROP INDEX 2t1col_b ON bup_ddl_blocker_2.t1
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+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
-debug_sync_point: DDL_blocked	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';
 con4: Try a DDL but it is blocked by backup -- will not be in backup
 CREATE INDEX 3t1col_b ON bup_ddl_blocker_3.t1 (col_b);
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 con5: Try a DDL but it is blocked by backup -- will not be in backup
 DROP INDEX 4t1col_b ON bup_ddl_blocker_4.t1;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "CREATE INDEX 3t1col_b%";
 state	info
-DDL blocker: DDL is blocked	CREATE INDEX 3t1col_b ON bup_ddl_blocker_3.t1 (col_b)
-Timeout in wait_condition.inc for SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DDROP INDEX 4t1col_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
-DDL blocker: DDL is blocked	DROP INDEX 4t1col_b ON bup_ddl_blocker_4.t1
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+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
 con3: Completing DDL
 con4: Completing DDL
@@ -1397,33 +1550,38 @@ col_a
 01 Some data to test
 02 Some data to test
 03 Some data to test
-con5: Getting lock on DDL in progress.
-SELECT get_lock("DDL_not_blocked", 0);
-get_lock("DDL_not_blocked", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 con2: Get a DDL going and stop in the middle
 ALTER TABLE bup_ddl_blocker.t1 ADD COLUMN col_b int;
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 con3: Get a DDL going and stop in the middle
 ALTER TABLE test.t2 ADD COLUMN col_b int;
+con3: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con4_started WAIT_FOR status_shown';
 con4: Get a DDL going and stop in the middle
 ALTER TABLE bup_ddl_blocker.t3 ADD COLUMN col_b int;
-con5: Checking locks
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t1%";
 state	info
-debug_sync_point: DDL_not_blocked	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
-debug_sync_point: DDL_not_blocked	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
-debug_sync_point: DDL_not_blocked	ALTER TABLE bup_ddl_blocker.t3 ADD COLUMN col_b int
-con5: Releasing lock
-SELECT release_lock("DDL_not_blocked");
-release_lock("DDL_not_blocked")
-1
+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
 con3: Completing DDL
 con4: Completing DDL
@@ -1460,3 +1618,4 @@ count(*)
 2
 DROP TABLE test.t2;
 DROP DATABASE bup_ddl_blocker;
+SET DEBUG_SYNC= 'reset';

=== modified file 'mysql-test/r/backup_progress.result'
--- a/mysql-test/r/backup_progress.result	2008-03-20 14:53:16 +0000
+++ b/mysql-test/r/backup_progress.result	2008-06-25 13:39:04 +0000
@@ -1,6 +1,6 @@
+SET DEBUG_SYNC= 'reset';
 DROP DATABASE IF EXISTS backup_progress;
 DROP TABLE IF EXISTS backup_progress.t1_res;
-SET GLOBAL debug="d,backup_debug:d,backup";
 CREATE DATABASE backup_progress;
 con1: Create table and new users.
 CREATE TABLE backup_progress.t1 (a char(30)) ENGINE=MYISAM;
@@ -25,49 +25,41 @@ INSERT INTO backup_progress.t3 VALUES ("
 INSERT INTO backup_progress.t3 VALUES ("03 Test #1 - progress");
 INSERT INTO backup_progress.t3 VALUES ("04 Test #1 - progress");
 Do backup of database
-SELECT get_lock("bp_starting_state", 0);
-get_lock("bp_starting_state", 0)
-1
+con2: Activate sync points for the backup statement.
+SET DEBUG_SYNC= 'after_backup_log_init     SIGNAL started   WAIT_FOR do_run';
+SET DEBUG_SYNC= 'after_backup_start_backup SIGNAL phase1    WAIT_FOR backup';
+SET DEBUG_SYNC= 'after_backup_validated    SIGNAL validated WAIT_FOR do_phase2';
+SET DEBUG_SYNC= 'after_backup_binlog       SIGNAL phase2    WAIT_FOR finish';
 con2: Send backup command.
 BACKUP DATABASE backup_progress to 'backup_progress_orig.bak';
-con1: Checking locks.
-con1: Checking progress.
+con1: Wait for the backup to be started.
+SET DEBUG_SYNC= 'now WAIT_FOR started';
+con1: Display progress
 SELECT MAX(backup_id) INTO @bup_id FROM mysql.online_backup WHERE command LIKE "BACKUP
DATABASE backup_progress%";
 INSERT INTO backup_progress.t1_res (id) VALUES (@bup_id);
 SELECT backup_state FROM mysql.online_backup AS ob JOIN backup_progress.t1_res as t1 ON
ob.backup_id = t1.id;
 backup_state
 starting
-con1: Advance the lock.
-SELECT get_lock("bp_running_state", 0);
-get_lock("bp_running_state", 0)
-1
-con1: Checking locks.
-con1: Checking progress.
+con1: Let backup step to running state.
+SET DEBUG_SYNC= 'now SIGNAL do_run WAIT_FOR phase1';
+con1: Display progress
 SELECT backup_state FROM mysql.online_backup AS ob JOIN backup_progress.t1_res as t1 ON
ob.backup_id = t1.id;
 backup_state
 running
-con1: Advance the lock.
-SELECT get_lock("bp_vp_state", 0);
-get_lock("bp_vp_state", 0)
-1
-con1: Checking locks.
-con1: Checking progress.
+con1: Let backup do the backup phase1.
+SET DEBUG_SYNC= 'now SIGNAL backup WAIT_FOR validated';
+con1: Display progress
 SELECT backup_state FROM mysql.online_backup AS ob JOIN backup_progress.t1_res as t1 ON
ob.backup_id = t1.id;
 backup_state
 validity point
-con1: Advance the lock.
-SELECT get_lock("bp_running_state", 0);
-get_lock("bp_running_state", 0)
-1
-con1: Checking locks.
-con1: Checking progress.
+con1: Let backup do the backup phase2.
+SET DEBUG_SYNC= 'now SIGNAL do_phase2 WAIT_FOR phase2';
+con1: Display progress
 SELECT backup_state FROM mysql.online_backup AS ob JOIN backup_progress.t1_res as t1 ON
ob.backup_id = t1.id;
 backup_state
 running
-con1: Advance the lock.
-SELECT release_lock("bp_running_state");
-release_lock("bp_running_state")
-1
+con1: Let backup finish.
+SET DEBUG_SYNC= 'now SIGNAL finish';
 con2: Finish backup command
 backup_id
 #
@@ -98,14 +90,15 @@ backup_id	object	start_time	stop_time	to
 #	backup kernel	#	#	0	0	0	running
 #	backup kernel	#	#	0	0	0	complete
 Do restore of database
-SELECT get_lock("bp_starting_state", 0);
-get_lock("bp_starting_state", 0)
-1
 DELETE FROM backup_progress.t1_res;
+con2: Activate sync points for the backup statement.
+SET DEBUG_SYNC= 'after_backup_log_init      SIGNAL started WAIT_FOR do_run';
+SET DEBUG_SYNC= 'after_backup_start_restore SIGNAL running WAIT_FOR finish';
 con2: Send restore command.
 RESTORE FROM 'backup_progress_orig.bak';
-con1: Checking locks.
-con1: Checking progress.
+con1: Wait for the restore to be started.
+SET DEBUG_SYNC= 'now WAIT_FOR started';
+con1: Display progress
 select * from backup_progress.t1_res;
 id
 SELECT MAX(backup_id) INTO @bup_id FROM mysql.online_backup WHERE command LIKE "RESTORE
FROM%";
@@ -113,19 +106,14 @@ INSERT INTO backup_progress.t1_res (id) 
 SELECT backup_state FROM mysql.online_backup AS ob JOIN backup_progress.t1_res as t1 ON
ob.backup_id = t1.id;
 backup_state
 starting
-con1: Advance the lock.
-SELECT get_lock("bp_running_state", 0);
-get_lock("bp_running_state", 0)
-1
-con1: Checking locks.
-con1: Checking progress.
+con1: Let restore step to running state.
+SET DEBUG_SYNC= 'now SIGNAL do_run WAIT_FOR running';
+con1: Display progress
 SELECT backup_state FROM mysql.online_backup AS ob JOIN backup_progress.t1_res as t1 ON
ob.backup_id = t1.id;
 backup_state
 running
-con1: Advance the lock.
-SELECT release_lock("bp_running_state");
-release_lock("bp_running_state")
-1
+con1: Let restore do its job and finish.
+SET DEBUG_SYNC= 'now SIGNAL finish';
 con2: Finish restore command
 backup_id
 #
@@ -156,4 +144,5 @@ backup_id	object	start_time	stop_time	to
 #	backup kernel	#	#	0	0	0	starting
 #	backup kernel	#	#	0	0	0	running
 #	backup kernel	#	#	0	0	0	complete
+SET DEBUG_SYNC= 'reset';
 DROP DATABASE backup_progress;

=== modified file 'mysql-test/r/backup_snapshot.result'
--- a/mysql-test/r/backup_snapshot.result	2007-12-04 17:38:12 +0000
+++ b/mysql-test/r/backup_snapshot.result	2008-06-25 13:39:04 +0000
@@ -1,6 +1,9 @@
+SET DEBUG_SYNC= 'reset';
 DROP DATABASE IF EXISTS bup_snapshot;
+#
+# Setup for tests.
+#
 CREATE DATABASE bup_snapshot;
-SET GLOBAL debug="d,backup_debug:d,backup";
 CREATE TABLE bup_snapshot.t1 (word CHAR(20)) ENGINE=INNODB;
 INSERT INTO bup_snapshot.t1 VALUES ("01 Some data to test");
 INSERT INTO bup_snapshot.t1 VALUES ("02 Some data to test");
@@ -23,21 +26,20 @@ COUNT(*)
 SELECT COUNT(*) FROM bup_snapshot.t2;
 COUNT(*)
 5
-con3: Getting lock on driver.
-SELECT get_lock("backup_cs_locked", 100);
-get_lock("backup_cs_locked", 100)
-1
+#
+# Test 1: Check for consistent read prior to open and lock tables
+#
+con1: Activate sync points for the backup statement.
+SET DEBUG_SYNC= 'after_backup_cs_locked SIGNAL locked WAIT_FOR inserting';
 con1: Backing up database. Spawn this and continue...
 BACKUP DATABASE bup_snapshot TO "bup_snapshot.bak";
-con3: Checking locks.
+con2: Wait for backup to have locked the transaction.
+SET DEBUG_SYNC= 'now WAIT_FOR locked';
+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';
 INSERT INTO bup_snapshot.t1 VALUES("- Dave Mathews");
-con3: Checking locks.
-con3: Release lock on driver.
-SELECT release_lock("backup_cs_locked");
-release_lock("backup_cs_locked")
-1
-backup_id
-#
+con2: insert additional rows.
 INSERT INTO bup_snapshot.t1 VALUES("- Yes");
 INSERT INTO bup_snapshot.t1 VALUES("- Jethro Tull");
 DELETE FROM bup_snapshot.t1 WHERE word LIKE '10%';
@@ -50,6 +52,11 @@ word
 SELECT COUNT(*) FROM bup_snapshot.t1;
 COUNT(*)
 12
+con1: retrieve backup result.
+backup_id
+#
+# Now restore the database and then check to make sure the new rows
+# were not backed up.
 con1: Dropping the database
 DROP TABLE bup_snapshot.t1;
 con1: Restoring the database
@@ -65,19 +72,20 @@ COUNT(*)
 SELECT COUNT(*) FROM bup_snapshot.t2;
 COUNT(*)
 5
-con3: Getting lock on driver.
-SELECT get_lock("backup_cs_reading", 100);
-get_lock("backup_cs_reading", 100)
-1
+#
+# Test 2: Check for consistent read after open and lock tables
+#
+con1: Activate sync points for the backup statement.
+SET DEBUG_SYNC= 'when_backup_cs_reading SIGNAL reading WAIT_FOR inserting';
 con1: Backing up database. Spawn this and continue...
 BACKUP DATABASE bup_snapshot TO "bup_snapshot.bak";
-con3: Checking locks.
+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= 'after_insert_locked_tables SIGNAL inserting';
 INSERT INTO bup_snapshot.t1 VALUES("- Dave Mathews");
-con3: Checking locks.
-con3: Release lock on driver.
-SELECT release_lock("backup_cs_reading");
-release_lock("backup_cs_reading")
-1
+con2: insert additional rows.
 INSERT INTO bup_snapshot.t1 VALUES("- Yes");
 INSERT INTO bup_snapshot.t1 VALUES("- Jethro Tull");
 DELETE FROM bup_snapshot.t1 WHERE word LIKE '10%';
@@ -90,8 +98,11 @@ word
 SELECT COUNT(*) FROM bup_snapshot.t1;
 COUNT(*)
 12
+con1: retrieve backup result.
 backup_id
 #
+# Now restore the database and then check to make sure the new rows
+# were not backed up.
 con1: Dropping the database
 DROP TABLE bup_snapshot.t1;
 con1: Restoring the database
@@ -107,4 +118,5 @@ COUNT(*)
 SELECT COUNT(*) FROM bup_snapshot.t2;
 COUNT(*)
 5
+SET DEBUG_SYNC= 'reset';
 DROP DATABASE bup_snapshot;

=== modified file 'mysql-test/r/backup_view_on_view.result'
--- a/mysql-test/r/backup_view_on_view.result	2008-06-05 12:38:10 +0000
+++ b/mysql-test/r/backup_view_on_view.result	2008-06-25 13:39:04 +0000
@@ -35,3 +35,4 @@ a
 5
 7
 11
+DROP DATABASE db1;

=== modified file 'mysql-test/r/character_set_server_func.result'
--- a/mysql-test/r/character_set_server_func.result	2008-04-10 13:14:28 +0000
+++ b/mysql-test/r/character_set_server_func.result	2008-06-25 13:39:04 +0000
@@ -1,3 +1,4 @@
+DROP DATABASE IF EXISTS db1;
 '#--------------------FN_DYNVARS_009_01-------------------------#'
 SET @global_character_set_server = @@global.character_set_server;
 SET @session_character_set_server = @@session.character_set_server;

=== modified file 'mysql-test/t/backup.test'
--- a/mysql-test/t/backup.test	2008-06-12 19:54:19 +0000
+++ b/mysql-test/t/backup.test	2008-06-25 13:39:04 +0000
@@ -1,15 +1,14 @@
 --source include/have_innodb.inc
 --source include/not_embedded.inc
---source include/have_debug.inc
+--source include/have_debug_sync.inc
+
+SET DEBUG_SYNC= 'RESET';
 
 connect (backup,localhost,root,,);
 connect (breakpoints,localhost,root,,);
 
 connection backup;
 
-# Setup the server to use the backup breakpoints
-SET GLOBAL debug="d,backup_debug:d,backup";
-
 --disable_warnings
 DROP DATABASE IF EXISTS db1;
 DROP DATABASE IF EXISTS db2;
@@ -105,31 +104,24 @@ UNLOCK TABLES;
 # in the process list and not a complete test of the locking
 # thread code.
 #
-connection breakpoints;
---echo breakpoints: Getting lock "locking_thread_added"
-SELECT get_lock("locking_thread_added", 100);
-
 connection backup;
+--echo backup: Activate synchronization points for BACKUP.
+SET DEBUG_SYNC= 'locking_thread_added SIGNAL bup_thread_added
+                 WAIT_FOR finish';
 --echo backup: Send the backup command.
 send BACKUP DATABASE db1,db2 TO 'test.ba';
 
 # get the lock and wait until lock is identified in process list
 connection breakpoints;
---echo breakpoints: Check for lock in process list.
-
-# Wait for lock to be acquired and execution to reach breakpoint
---echo breakpoints: Checking locks.
-let $wait_condition = SELECT count(*) = 1
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "default driver locking thread%";
---source include/wait_condition.inc
+--echo breakpoints: Wait for BACKUP to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_thread_added';
 
 --replace_column 1 #
 query_vertical SELECT id, command, state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 WHERE info LIKE "BACKUP DATABASE%" OR info LIKE "default driver locking thread%";
 
---echo breakpoints: Release lock
-SELECT release_lock("locking_thread_added");
+--echo breakpoints: Sending finish signal to wake BACKUP.
+SET DEBUG_SYNC= 'now SIGNAL finish';
 
 # reattach to backup job
 connection backup;
@@ -174,6 +166,7 @@ SHOW CREATE TABLE tasking;
 DROP DATABASE db1;
 DROP DATABASE db2;
 DROP DATABASE db3;
+SET DEBUG_SYNC= 'RESET';
 
 #
 # This test is for the default and snapshot online backup drivers

=== modified file 'mysql-test/t/backup_commit_blocker.test'
--- a/mysql-test/t/backup_commit_blocker.test	2007-12-20 20:32:22 +0000
+++ b/mysql-test/t/backup_commit_blocker.test	2008-06-25 13:39:04 +0000
@@ -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_lock_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_lock_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';
 

=== modified file 'mysql-test/t/backup_ddl_blocker.test'
--- a/mysql-test/t/backup_ddl_blocker.test	2008-02-14 20:57:18 +0000
+++ b/mysql-test/t/backup_ddl_blocker.test	2008-06-25 13:39:04 +0000
@@ -1,5 +1,5 @@
 #
-# This test is for the DDL blocker
+# This test is for the DDL blocker.
 # The goals of the test should be to ensure the following assumptions for
 # the behaviour of the DDL blocker hold true.
 #
@@ -42,22 +42,19 @@
 #
 # TODO : Add a native driver to the test when one becomes available
 #
-# 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
 
+SET DEBUG_SYNC= 'reset';
+
 #
 # Remove backup files (if they exist)
 #
+# Note: More preparatory cleanup is done in
+# include/backup_ddl_create_data.inc
+#
 
 --error 0,1
 --remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker_orig.bak;
@@ -69,7 +66,7 @@
 #
 # con1       used to create data, load data, and run the backup 
 # con2-con5  used for DDL statements: 2 before backup and 2 during backup
-# con6       used for setting and releasing breakpoints
+# con6       used to show status/processlist 
 #
 
 connect (con1,localhost,root,,);
@@ -81,9 +78,6 @@ connect (con6,localhost,root,,);
 
 connection con1;
 
-# Setup the server to use the backup breakpoints
-SET GLOBAL debug="d,backup_debug:d,backup";
-
 #
 # Backup test sequence diagram (not UML)
 #
@@ -96,27 +90,30 @@ SET GLOBAL debug="d,backup_debug:d,backu
 # 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)    |        |        |        |        |
 #
 # Note: The resume of the commands is indicated with <...> and
 #       may occur in any order.
 #
+# Note by Ingo: I wonder if the line above "(results)" is correct.
+# I understand the above explanations so that DDL3 and 4 cannot
+# resume before BACKUP/RESTORE finished. But the line indicates
+# that these can resume in any order.
 
 
 ##############################################################
@@ -129,19 +126,19 @@ SET GLOBAL debug="d,backup_debug:d,backu
 --source include/backup_ddl_create_data.inc
 DROP TABLE bup_ddl_blocker.t1, bup_ddl_blocker.t3;
 
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
 connection con2;
 
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 --echo con2: Get a DDL going and stop in the middle
 send CREATE TABLE bup_ddl_blocker.t1 (col_a CHAR(40)) ENGINE=INNODB;
 
 connection con3;
 
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 --echo con3: Get a DDL going and stop in the middle
 send ALTER TABLE bup_ddl_blocker.t2 ADD COLUMN col_b int;
 
@@ -149,85 +146,61 @@ send ALTER TABLE bup_ddl_blocker.t2 ADD 
 
 connection con1;
 
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 --echo con1: Backing up database -- will block with lock
 send BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak";
 
 connection con6;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "BACKUP DATABASE%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "BACKUP DATABASE%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
+  WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
 
+--echo 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%";
+  WHERE info LIKE "BACKUP DATABASE%";
 
 connection con4;
 
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+                 WAIT_FOR status_shown2';
 --echo con4: Try a DDL but it is blocked by backup -- will not be in backup
 send CREATE TABLE bup_ddl_blocker.t3 (col_a CHAR(40)) ENGINE=INNODB;
 
 connection con5;
 
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 --echo con5: Try a DDL but it is blocked by backup -- will not be in backup
 send ALTER TABLE bup_ddl_blocker.t4 ADD COLUMN col_b int;
 
 connection con6;
 
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
+  WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
 
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
 
 connection con2;
 --echo con2: Completing DDL
@@ -245,7 +218,7 @@ connection con5;
 --echo con5: Completing DDL
 reap;
 
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
 
 connection con1;
 --replace_column 1 #
@@ -298,19 +271,19 @@ DROP TABLE bup_ddl_blocker.t1, bup_ddl_b
 --replace_column 1 #
 BACKUP DATABASE bup_ddl_blocker to 'bup_ddl_blocker_orig.bak';
 
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
 connection con2;
 
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 --echo con2: Get a DDL going and stop in the middle
 send CREATE TABLE bup_ddl_blocker.t1 (col_a CHAR(40)) ENGINE=INNODB;
 
 connection con3;
 
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 --echo con3: Get a DDL going and stop in the middle
 send ALTER TABLE bup_ddl_blocker.t2 ADD COLUMN col_b int;
 
@@ -318,85 +291,61 @@ send ALTER TABLE bup_ddl_blocker.t2 ADD 
 
 connection con1;
 
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 --echo con1: Restoring database -- will block with lock
 send RESTORE FROM "bup_ddl_blocker_orig.bak";
 
 connection con6;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RESTORE FROM%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "RESTORE FROM%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
+  WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
 
+--echo 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%";
+  WHERE info LIKE "RESTORE FROM%";
 
 connection con4;
 
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+                 WAIT_FOR status_shown2';
 --echo con4: Try a DDL but it is blocked by backup -- will not be in backup
 send CREATE TABLE bup_ddl_blocker.t3 (col_a CHAR(40)) ENGINE=INNODB;
 
 connection con5;
 
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 --echo con5: Try a DDL but it is blocked by backup -- will not be in backup
 send ALTER TABLE bup_ddl_blocker.t4 ADD COLUMN col_b int;
 
 connection con6;
 
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
+  WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
 
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
 
 connection con2;
 --echo con2: Completing DDL
@@ -414,15 +363,17 @@ connection con5;
 --echo con5: Completing DDL
 reap;
 
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
 
 connection con1;
 --replace_column 1 #
 reap;
 
+##############################################################
 --echo
 --echo Verifying Test 1 results for restore.
 --echo
+##############################################################
 
 --echo con1: Table t1 should not be in restored data.
 --echo con1: Table t2 should not have new column in restored data.
@@ -434,6 +385,9 @@ DESCRIBE bup_ddl_blocker.t2;
 DESCRIBE bup_ddl_blocker.t3;
 DESCRIBE bup_ddl_blocker.t4;
 
+# Cleanup
+--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
+
 
 
 ##############################################################
@@ -445,19 +399,19 @@ DESCRIBE bup_ddl_blocker.t4;
 # Create data for this test and tailor it to the test.
 --source include/backup_ddl_create_data.inc
 
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
 connection con2;
 
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 --echo con2: Get a DDL going and stop in the middle
 send RENAME TABLE bup_ddl_blocker.t1 TO bup_ddl_blocker.t01;
 
 connection con3;
 
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 --echo con3: Get a DDL going and stop in the middle
 send REPAIR TABLE bup_ddl_blocker.t2;
 
@@ -465,87 +419,61 @@ send REPAIR TABLE bup_ddl_blocker.t2;
 
 connection con1;
 
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 --echo con1: Backing up database -- will block with lock
---remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
 send BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak";
 
 connection con6;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "BACKUP DATABASE%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "BACKUP DATABASE%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
-
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
+  WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
 
+--echo 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%";
+  WHERE info LIKE "BACKUP DATABASE%";
 
 connection con4;
 
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+                 WAIT_FOR status_shown2';
 --echo con4: Try a DDL but it is blocked by backup -- will not be in backup
 send RENAME TABLE bup_ddl_blocker.t3 TO bup_ddl_blocker.t03;
 
 connection con5;
 
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 --echo con5: Try a DDL but it is blocked by backup -- will not be in backup
 send REPAIR TABLE bup_ddl_blocker.t4;
 
 connection con6;
 
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
+  WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
 
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
 
 connection con2;
 --echo con2: Completing DDL
@@ -563,7 +491,7 @@ connection con5;
 --echo con5: Completing DDL
 reap;
 
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
 
 connection con1;
 --replace_column 1 #
@@ -610,19 +538,19 @@ SHOW TABLES;
 --replace_column 1 #
 BACKUP DATABASE bup_ddl_blocker to 'bup_ddl_blocker_orig.bak';
 
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
 connection con2;
 
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 --echo con2: Get a DDL going and stop in the middle
 send RENAME TABLE bup_ddl_blocker.t1 TO bup_ddl_blocker.t01;
 
 connection con3;
 
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 --echo con3: Get a DDL going and stop in the middle
 send REPAIR TABLE bup_ddl_blocker.t2;
 
@@ -630,85 +558,61 @@ send REPAIR TABLE bup_ddl_blocker.t2;
 
 connection con1;
 
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 --echo con1: Restoring database -- will block with lock
 send RESTORE FROM "bup_ddl_blocker_orig.bak";
 
 connection con6;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RESTORE FROM%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "RESTORE FROM%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
+  WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
 
+--echo 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%";
+  WHERE info LIKE "RESTORE FROM%";
 
 connection con4;
 
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+                 WAIT_FOR status_shown2';
 --echo con4: Try a DDL but it is blocked by backup -- will not be in backup
 send RENAME TABLE bup_ddl_blocker.t3 TO bup_ddl_blocker.t03;
 
 connection con5;
 
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 --echo con5: Try a DDL but it is blocked by backup -- will not be in backup
 send REPAIR TABLE bup_ddl_blocker.t4;
 
 connection con6;
 
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
+  WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
 
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
 
 connection con2;
 --echo con2: Completing DDL
@@ -726,7 +630,7 @@ connection con5;
 --echo con5: Completing DDL
 reap;
 
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
 
 connection con1;
 --replace_column 1 #
@@ -742,7 +646,8 @@ reap;
 use bup_ddl_blocker;
 SHOW TABLES;
 
-
+# Cleanup
+--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
 
 
 
@@ -755,19 +660,19 @@ SHOW TABLES;
 # Create data for this test and tailor it to the test.
 --source include/backup_ddl_create_data.inc
 
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
 connection con2;
 
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 --echo con2: Get a DDL going and stop in the middle
 send OPTIMIZE TABLE bup_ddl_blocker.t1;
 
 connection con3;
 
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 --echo con3: Get a DDL going and stop in the middle
 send DROP TABLE bup_ddl_blocker.t2;
 
@@ -775,86 +680,61 @@ send DROP TABLE bup_ddl_blocker.t2;
 
 connection con1;
 
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 --echo con1: Backing up database -- will block with lock
---remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
 send BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak";
 
 connection con6;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "BACKUP DATABASE%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "BACKUP DATABASE%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
+  WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
 
+--echo 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%";
+  WHERE info LIKE "BACKUP DATABASE%";
 
 connection con4;
 
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+                 WAIT_FOR status_shown2';
 --echo con4: Try a DDL but it is blocked by backup -- will not be in backup
 send OPTIMIZE TABLE bup_ddl_blocker.t3;
 
 connection con5;
 
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 --echo con5: Try a DDL but it is blocked by backup -- will not be in backup
 send DROP TABLE bup_ddl_blocker.t4;
 
 connection con6;
 
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
+  WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
 
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
 
 connection con2;
 --echo con2: Completing DDL
@@ -872,7 +752,7 @@ connection con5;
 --echo con5: Completing DDL
 reap;
 
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
 
 connection con1;
 --replace_column 1 #
@@ -917,19 +797,19 @@ SHOW TABLES;
 --replace_column 1 #
 BACKUP DATABASE bup_ddl_blocker to 'bup_ddl_blocker_orig.bak';
 
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
 connection con2;
 
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 --echo con2: Get a DDL going and stop in the middle
 send OPTIMIZE TABLE bup_ddl_blocker.t1;
 
 connection con3;
 
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 --echo con3: Get a DDL going and stop in the middle
 send DROP TABLE bup_ddl_blocker.t2;
 
@@ -937,85 +817,61 @@ send DROP TABLE bup_ddl_blocker.t2;
 
 connection con1;
 
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 --echo con1: Restoring database -- will block with lock
 send RESTORE FROM "bup_ddl_blocker_orig.bak";
 
 connection con6;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RESTORE FROM%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "RESTORE FROM%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
+  WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
 
+--echo 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%";
+  WHERE info LIKE "RESTORE FROM%";
 
 connection con4;
 
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+                 WAIT_FOR status_shown2';
 --echo con4: Try a DDL but it is blocked by backup -- will not be in backup
 send OPTIMIZE TABLE bup_ddl_blocker.t3;
 
 connection con5;
 
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 --echo con5: Try a DDL but it is blocked by backup -- will not be in backup
 send DROP TABLE bup_ddl_blocker.t4;
 
 connection con6;
 
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
+  WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
 
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
 
 connection con2;
 --echo con2: Completing DDL
@@ -1033,7 +889,7 @@ connection con5;
 --echo con5: Completing DDL
 reap;
 
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
 
 connection con1;
 --replace_column 1 #
@@ -1049,7 +905,8 @@ reap;
 use bup_ddl_blocker;
 SHOW TABLES;
 
-
+# Cleanup
+--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
 
 
 
@@ -1088,19 +945,19 @@ INSERT INTO bup_ddl_blocker_4.t1 VALUES 
 --echo con1: Show that the new data doesn't exist before backup.
 SHOW DATABASES LIKE 'bup_ddl_blocker_%';
 
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
 connection con2;
 
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 --echo con2: Get a DDL going and stop in the middle
 send CREATE DATABASE bup_ddl_blocker_1;
 
 connection con3;
 
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 --echo con3: Get a DDL going and stop in the middle
 send DROP DATABASE bup_ddl_blocker_2;
 
@@ -1108,86 +965,61 @@ send DROP DATABASE bup_ddl_blocker_2;
 
 connection con1;
 
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 --echo con1: Backing up database -- will block with lock
---remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
 send BACKUP DATABASE * TO "bup_ddl_blocker.bak";
 
 connection con6;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "BACKUP DATABASE%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "BACKUP DATABASE%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
+  WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
 
+--echo 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%";
+  WHERE info LIKE "BACKUP DATABASE%";
 
 connection con4;
 
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+                 WAIT_FOR status_shown2';
 --echo con4: Try a DDL but it is blocked by backup -- will not be in backup
 send CREATE DATABASE bup_ddl_blocker_3;
 
 connection con5;
 
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 --echo con5: Try a DDL but it is blocked by backup -- will not be in backup
 send DROP DATABASE bup_ddl_blocker_4;
 
 connection con6;
 
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
+  WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
 
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
 
 connection con2;
 --echo con2: Completing DDL
@@ -1205,7 +1037,7 @@ connection con5;
 --echo con5: Completing DDL
 reap;
 
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
 
 connection con1;
 --replace_column 1 #
@@ -1279,19 +1111,19 @@ SHOW DATABASES LIKE 'bup_ddl_blocker_%';
 --replace_column 1 #
 BACKUP DATABASE bup_ddl_blocker_2, bup_ddl_blocker_4 to 'bup_ddl_blocker_orig.bak';
 
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
 connection con2;
 
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 --echo con2: Get a DDL going and stop in the middle
 send CREATE DATABASE bup_ddl_blocker_1;
 
 connection con3;
 
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 --echo con3: Get a DDL going and stop in the middle
 send DROP DATABASE bup_ddl_blocker_2;
 
@@ -1299,85 +1131,61 @@ send DROP DATABASE bup_ddl_blocker_2;
 
 connection con1;
 
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 --echo con1: Restoring database -- will block with lock
 send RESTORE FROM "bup_ddl_blocker_orig.bak";
 
 connection con6;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RESTORE FROM%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "RESTORE FROM%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
+  WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
 
+--echo 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%";
+  WHERE info LIKE "RESTORE FROM%";
 
 connection con4;
 
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+                 WAIT_FOR status_shown2';
 --echo con4: Try a DDL but it is blocked by backup -- will not be in backup
 send CREATE DATABASE bup_ddl_blocker_3;
 
 connection con5;
 
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 --echo con5: Try a DDL but it is blocked by backup -- will not be in backup
 send DROP DATABASE bup_ddl_blocker_4;
 
 connection con6;
 
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
+  WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
 
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
 
 connection con2;
 --echo con2: Completing DDL
@@ -1395,7 +1203,7 @@ connection con5;
 --echo con5: Completing DDL
 reap;
 
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
 
 connection con1;
 --replace_column 1 #
@@ -1410,7 +1218,8 @@ reap;
 --echo con1: Database bup_ddl_blocker_4 should not be in restored data.
 SHOW DATABASES LIKE 'bup_ddl_blocker_%';
 
-
+# Cleanup
+--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
 
 
 
@@ -1450,19 +1259,19 @@ INSERT INTO bup_ddl_blocker_4.t1 VALUES 
 --echo con1: Show that the new data doesn't exist before backup.
 SHOW DATABASES LIKE 'bup_ddl_blocker_%';
 
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
 connection con2;
 
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 --echo con2: Get a DDL going and stop in the middle
 send TRUNCATE TABLE bup_ddl_blocker_2.t1;
 
 connection con3;
 
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 --echo con3: Get a DDL going and stop in the middle
 send ALTER DATABASE bup_ddl_blocker_2 CHARACTER SET latin2;
 
@@ -1470,85 +1279,61 @@ send ALTER DATABASE bup_ddl_blocker_2 CH
 
 connection con1;
 
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 --echo con1: Backing up database -- will block with lock
---remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
 send BACKUP DATABASE * TO "bup_ddl_blocker.bak";
 
 connection con6;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "BACKUP DATABASE%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "BACKUP DATABASE%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
+  WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
 
+--echo 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%";
+  WHERE info LIKE "BACKUP DATABASE%";
 
 connection con4;
 
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+                 WAIT_FOR status_shown2';
 --echo con4: Try a DDL but it is blocked by backup -- will not be in backup
 send TRUNCATE TABLE bup_ddl_blocker_4.t1;
 
 connection con5;
 
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 --echo con5: Try a DDL but it is blocked by backup -- will not be in backup
 send ALTER DATABASE bup_ddl_blocker_4 CHARACTER SET latin2;
-connection con6;
 
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
---source include/wait_condition.inc
+connection con6;
 
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
+  WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
 
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
 
 connection con2;
 --echo con2: Completing DDL
@@ -1566,7 +1351,7 @@ connection con5;
 --echo con5: Completing DDL
 reap;
 
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
 
 connection con1;
 --replace_column 1 #
@@ -1613,7 +1398,6 @@ SELECT * FROM bup_ddl_blocker_4.t1;
 DROP DATABASE bup_ddl_blocker_2;
 DROP DATABASE bup_ddl_blocker_4;
 
-
 ##############################################################
 --echo 
 --echo Starting Test 5 - Restore
@@ -1655,19 +1439,19 @@ SHOW DATABASES LIKE 'bup_ddl_blocker_%';
 --replace_column 1 #
 BACKUP DATABASE bup_ddl_blocker_2, bup_ddl_blocker_4 to 'bup_ddl_blocker_orig.bak';
 
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
 connection con2;
 
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 --echo con2: Get a DDL going and stop in the middle
 send TRUNCATE TABLE bup_ddl_blocker_2.t1;
 
 connection con3;
 
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 --echo con3: Get a DDL going and stop in the middle
 send ALTER DATABASE bup_ddl_blocker_2 CHARACTER SET latin2;
 
@@ -1675,85 +1459,61 @@ send ALTER DATABASE bup_ddl_blocker_2 CH
 
 connection con1;
 
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 --echo con1: Restoring database -- will block with lock
 send RESTORE FROM "bup_ddl_blocker_orig.bak";
 
 connection con6;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RESTORE FROM%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "RESTORE FROM%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
+  WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
 
+--echo 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%";
+  WHERE info LIKE "RESTORE FROM%";
 
 connection con4;
 
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+                 WAIT_FOR status_shown2';
 --echo con4: Try a DDL but it is blocked by backup -- will not be in backup
 send TRUNCATE TABLE bup_ddl_blocker_4.t1;
 
 connection con5;
 
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 --echo con5: Try a DDL but it is blocked by backup -- will not be in backup
 send ALTER DATABASE bup_ddl_blocker_4 CHARACTER SET latin2;
 
 connection con6;
 
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
+  WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
 
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
 
 connection con2;
 --echo con2: Completing DDL
@@ -1771,7 +1531,7 @@ connection con5;
 --echo con5: Completing DDL
 reap;
 
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
 
 connection con1;
 --replace_column 1 #
@@ -1796,7 +1556,8 @@ SELECT * FROM bup_ddl_blocker_4.t1;
 DROP DATABASE bup_ddl_blocker_2;
 DROP DATABASE bup_ddl_blocker_4;
 
-
+# Cleanup
+--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
 
 
 
@@ -1848,19 +1609,19 @@ INSERT INTO bup_ddl_blocker_4.t1 VALUES 
 
 CREATE INDEX 4t1col_b ON bup_ddl_blocker_4.t1 (col_b); 
 
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
 connection con2;
 
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 --echo con2: Get a DDL going and stop in the middle
 send CREATE INDEX 1t1col_b ON bup_ddl_blocker_1.t1 (col_b); 
 
 connection con3;
 
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 --echo con3: Get a DDL going and stop in the middle
 send DROP INDEX 2t1col_b ON bup_ddl_blocker_2.t1;
 
@@ -1868,7 +1629,11 @@ send DROP INDEX 2t1col_b ON bup_ddl_bloc
 
 connection con1;
 
---remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 --echo con1: Backing up database -- will block with lock
 send BACKUP DATABASE bup_ddl_blocker_1, bup_ddl_blocker_2,
                      bup_ddl_blocker_3, bup_ddl_blocker_4
@@ -1876,80 +1641,51 @@ send BACKUP DATABASE bup_ddl_blocker_1, 
 
 connection con6;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "BACKUP DATABASE%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "CREATE INDEX 1t1col_b%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "BACKUP DATABASE%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE INDEX 1t1col_b%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "DROP INDEX 2t1col_b%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "CREATE INDEX 1t1col_b%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP INDEX 2t1col_b%";
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
+  WHERE info LIKE "DROP INDEX 2t1col_b%";
 
+--echo 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%";
+  WHERE info LIKE "BACKUP DATABASE%";
 
 connection con4;
 
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+                 WAIT_FOR status_shown2';
 --echo con4: Try a DDL but it is blocked by backup -- will not be in backup
 send CREATE INDEX 3t1col_b ON bup_ddl_blocker_3.t1 (col_b);
 
 connection con5;
 
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 --echo con5: Try a DDL but it is blocked by backup -- will not be in backup
 send DROP INDEX 4t1col_b ON bup_ddl_blocker_4.t1;
 
 connection con6;
 
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "CREATE INDEX 3t1col_b%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE INDEX 3t1col_b%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "DROP INDEX 4t1col_b%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "CREATE INDEX 3t1col_b%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP INDEX 4t1col_b%";
+  WHERE info LIKE "DROP INDEX 4t1col_b%";
 
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
 
 connection con2;
 --echo con2: Completing DDL
@@ -1967,7 +1703,7 @@ connection con5;
 --echo con5: Completing DDL
 reap;
 
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
 
 connection con1;
 --replace_column 1 #
@@ -2017,6 +1753,7 @@ DROP DATABASE bup_ddl_blocker_4;
 --echo Starting Test 6 - Restore
 --echo 
 ##############################################################
+
 --disable_warnings
 DROP DATABASE IF EXISTS bup_ddl_blocker_1;
 DROP DATABASE IF EXISTS bup_ddl_blocker_2;
@@ -2066,19 +1803,19 @@ BACKUP DATABASE bup_ddl_blocker_1, bup_d
                 bup_ddl_blocker_3, bup_ddl_blocker_4
                 TO "bup_ddl_blocker_orig.bak";
 
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
 connection con2;
 
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 --echo con2: Get a DDL going and stop in the middle
 send CREATE INDEX 1t1col_b ON bup_ddl_blocker_1.t1 (col_b);
 
 connection con3;
 
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 --echo con3: Get a DDL going and stop in the middle
 send DROP INDEX 2t1col_b ON bup_ddl_blocker_2.t1;
 
@@ -2086,85 +1823,61 @@ send DROP INDEX 2t1col_b ON bup_ddl_bloc
 
 connection con1;
 
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
 --echo con1: Restoring database -- will block with lock
 send RESTORE FROM "bup_ddl_blocker_orig.bak";
 
 connection con6;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RESTORE FROM%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "CREATE INDEX 1t1col_b%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "RESTORE FROM%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE INDEX 1t1col_b%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "DROP INDEX 2t1col_b%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "CREATE INDEX 1t1col_b%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP INDEX 2t1col_b%";
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
+  WHERE info LIKE "DROP INDEX 2t1col_b%";
 
+--echo 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%";
+  WHERE info LIKE "RESTORE FROM%";
 
 connection con4;
 
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+                 WAIT_FOR status_shown2';
 --echo con4: Try a DDL but it is blocked by backup -- will not be in backup
 send CREATE INDEX 3t1col_b ON bup_ddl_blocker_3.t1 (col_b);
 
 connection con5;
 
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+                 WAIT_FOR status_shown2';
 --echo con5: Try a DDL but it is blocked by backup -- will not be in backup
 send DROP INDEX 4t1col_b ON bup_ddl_blocker_4.t1;
 
 connection con6;
 
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "CREATE INDEX 3t1col_b%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE INDEX 3t1col_b%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "DDROP INDEX 4t1col_b%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "CREATE INDEX 3t1col_b%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP INDEX 4t1col_b%";
+  WHERE info LIKE "DROP INDEX 4t1col_b%";
 
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
 
 connection con2;
 --echo con2: Completing DDL
@@ -2182,7 +1895,7 @@ connection con5;
 --echo con5: Completing DDL
 reap;
 
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
 
 connection con1;
 --replace_column 1 #
@@ -2207,7 +1920,8 @@ DROP DATABASE bup_ddl_blocker_2;
 DROP DATABASE bup_ddl_blocker_3;
 DROP DATABASE bup_ddl_blocker_4;
 
-
+# Cleanup
+--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
 
 
 
@@ -2265,59 +1979,46 @@ SELECT * FROM bup_ddl_blocker.t1;
 SELECT * FROM test.t2;
 SELECT * FROM bup_ddl_blocker.t3;
 
-connection con5;
-
-# Set the breakpoint for DDL in progress.
---echo con5: Getting lock on DDL in progress.
-SELECT get_lock("DDL_not_blocked", 0);
-
 connection con2;
 
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
 --echo con2: Get a DDL going and stop in the middle
 send ALTER TABLE bup_ddl_blocker.t1 ADD COLUMN col_b int;
 
 connection con3;
 
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
 --echo con3: Get a DDL going and stop in the middle
 send ALTER TABLE test.t2 ADD COLUMN col_b int;
 
 connection con4;
 
+--echo con3: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con4_started WAIT_FOR status_shown';
 --echo con4: Get a DDL going and stop in the middle
 send ALTER TABLE bup_ddl_blocker.t3 ADD COLUMN col_b int;
 
 connection con5;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_not_blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t1%";
---source include/wait_condition.inc
-
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t1%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_not_blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "ALTER TABLE test.t2%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t1%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "ALTER TABLE test.t2%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_not_blocked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t3%";
---source include/wait_condition.inc
-
+  WHERE info LIKE "ALTER TABLE test.t2%";
 SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t3%";
+  WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t3%";
 
---echo con5: Releasing lock
-SELECT release_lock("DDL_not_blocked");
+--echo con5: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown';
 
-# Reconnect to con2, con3, and con4 and allow them to finish.
+# Reconnect to con2, con3, and con4 and fetch their results.
 
 connection con2;
 --echo con2: Completing DDL
@@ -2362,21 +2063,26 @@ WHERE TABLE_NAME = 't3' AND TABLE_SCHEMA
 DROP TABLE test.t2;
 DROP DATABASE bup_ddl_blocker;
 
-#
-# Normally, when tests are run the test/ directory corresponding to the test database
-# is empty. In particular, it doesn't contain the db.opt file storing database settings.
-# Some tests rely on that, as they use server options to determine these settings.
-# If we backup test database (e.g., with "BACKUP DATABASE * ...") and then restore it,
-# then it will be created using "CREATE DATABASE test" statement and this will create
-# the db.opt file. As a result, some tests run after that will fail. To avoid this
situation
-# we remove the test/db.opt file as a part of clean-up.
-#
+# Normally, when tests are run the test/ directory corresponding to the
+# test database is empty. In particular, it doesn't contain the db.opt
+# file storing database settings. Some tests rely on that, as they use
+# server options to determine these settings. If we backup test database
+# (e.g., with "BACKUP DATABASE * ...") and then restore it, then it will
+# be created using "CREATE DATABASE test" statement and this will create
+# the db.opt file. As a result, some tests run after that will fail. To
+# avoid this situation we remove the test/db.opt file as a part of
+# clean-up.
 --error 0,1
 --remove_file $MYSQLTEST_VARDIR/master-data/test/db.opt
 --remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker_orig.bak
---remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
-
-
 
+connection default;
+disconnect con1;
+disconnect con2;
+disconnect con3;
+disconnect con4;
+disconnect con5;
+disconnect con6;
 
+SET DEBUG_SYNC= 'reset';
 

=== modified file 'mysql-test/t/backup_many_dbs.test'
--- a/mysql-test/t/backup_many_dbs.test	2008-06-20 08:33:54 +0000
+++ b/mysql-test/t/backup_many_dbs.test	2008-06-25 13:39:04 +0000
@@ -1,9 +1,7 @@
 ###########################################################################
 # Regression test for bug#33568
 ###############################################################################
---source include/have_innodb.inc
 --source include/not_embedded.inc
---source include/have_debug.inc
 
 ##############################################################
 --echo Starting regression test for bug 33568

=== modified file 'mysql-test/t/backup_multi_blocks.test'
--- a/mysql-test/t/backup_multi_blocks.test	2008-06-23 14:53:35 +0000
+++ b/mysql-test/t/backup_multi_blocks.test	2008-06-25 13:39:04 +0000
@@ -1,5 +1,4 @@
 --source include/not_embedded.inc
---source include/have_debug.inc
 
 # Run test only on 64-bit platforms until BUG#36624 has been fixed.
 --source include/have_64bit.inc

=== modified file 'mysql-test/t/backup_no_be.test'
--- a/mysql-test/t/backup_no_be.test	2008-05-10 08:42:49 +0000
+++ b/mysql-test/t/backup_no_be.test	2008-06-25 13:39:04 +0000
@@ -67,7 +67,7 @@ SELECT @@debug;
 --remove_file $MYSQLTEST_VARDIR/master-data/db1.bak
 --replace_column 1 #
 BACKUP DATABASE db1 TO 'db1.bak';
---enable_warings
+--enable_warnings
 
 # Don't show warning message code
 --replace_column 2 #

=== modified file 'mysql-test/t/backup_progress.test'
--- a/mysql-test/t/backup_progress.test	2008-03-20 14:53:16 +0000
+++ b/mysql-test/t/backup_progress.test	2008-06-25 13:39:04 +0000
@@ -4,11 +4,15 @@
 #
 
 --source include/have_log_bin.inc
---source include/have_debug.inc
+--source include/have_debug_sync.inc
 --source include/have_innodb.inc
 --source include/not_embedded.inc
 
+#
+# Preparative cleanup.
+#
 --disable_warnings
+SET DEBUG_SYNC= 'reset';
 DROP DATABASE IF EXISTS backup_progress;
 DROP TABLE IF EXISTS backup_progress.t1_res;
 --error 0,1
@@ -18,9 +22,6 @@ DROP TABLE IF EXISTS backup_progress.t1_
 connect (con1,localhost,root,,);
 connect (con2,localhost,root,,);
 
-# Setup the server to use the backup breakpoints
-SET GLOBAL debug="d,backup_debug:d,backup";
-
 #
 # Test 1 - Check output of backup.
 #
@@ -58,96 +59,47 @@ INSERT INTO backup_progress.t3 VALUES ("
 
 --echo Do backup of database
 
-SELECT get_lock("bp_starting_state", 0);
-
 connection con2;
 
+--echo con2: Activate sync points for the backup statement.
+SET DEBUG_SYNC= 'after_backup_log_init     SIGNAL started   WAIT_FOR do_run';
+SET DEBUG_SYNC= 'after_backup_start_backup SIGNAL phase1    WAIT_FOR backup';
+SET DEBUG_SYNC= 'after_backup_validated    SIGNAL validated WAIT_FOR do_phase2';
+SET DEBUG_SYNC= 'after_backup_binlog       SIGNAL phase2    WAIT_FOR finish';
+
 --echo con2: Send backup command.
 send BACKUP DATABASE backup_progress to 'backup_progress_orig.bak';
 
 connection con1;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con1: Checking locks.
-let $wait_condition = SELECT state = "debug_sync_point: bp_starting_state"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE %";
---source include/wait_condition.inc
-
-# Wait for row to be written to progress table.
---echo con1: Checking progress.
-let $wait_condition = SELECT backup_state = "starting"
-                      FROM mysql.online_backup
-                      WHERE command LIKE "BACKUP DATABASE backup_progress%";
---source include/wait_condition.inc
+--echo con1: Wait for the backup to be started.
+SET DEBUG_SYNC= 'now WAIT_FOR started';
 
---echo: Display progress
+--echo con1: Display progress
 SELECT MAX(backup_id) INTO @bup_id FROM mysql.online_backup WHERE command LIKE "BACKUP
DATABASE backup_progress%";
 INSERT INTO backup_progress.t1_res (id) VALUES (@bup_id);
 SELECT backup_state FROM mysql.online_backup AS ob JOIN backup_progress.t1_res as t1 ON
ob.backup_id = t1.id;
 
---echo con1: Advance the lock.
-SELECT get_lock("bp_running_state", 0);
+--echo con1: Let backup step to running state.
+SET DEBUG_SYNC= 'now SIGNAL do_run WAIT_FOR phase1';
+
+--echo con1: Display progress
+SELECT backup_state FROM mysql.online_backup AS ob JOIN backup_progress.t1_res as t1 ON
ob.backup_id = t1.id;
+
+--echo con1: Let backup do the backup phase1.
+SET DEBUG_SYNC= 'now SIGNAL backup WAIT_FOR validated';
+
+--echo con1: Display progress
+SELECT backup_state FROM mysql.online_backup AS ob JOIN backup_progress.t1_res as t1 ON
ob.backup_id = t1.id;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con1: Checking locks.
-let $wait_condition = SELECT state = "debug_sync_point: bp_running_state"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE %";
---source include/wait_condition.inc
-
-# Wait for row to be written to progress table.
---echo con1: Checking progress.
-let $wait_condition = SELECT backup_state = "running"
-                      FROM mysql.online_backup
-                      WHERE command LIKE "BACKUP DATABASE backup_progress%";
---source include/wait_condition.inc
-
---echo: Display progress
-SELECT backup_state FROM mysql.online_backup AS ob JOIN backup_progress.t1_res as t1 ON
ob.backup_id = t1.id;
-
---echo con1: Advance the lock.
-SELECT get_lock("bp_vp_state", 0);
-
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con1: Checking locks.
-let $wait_condition = SELECT state = "debug_sync_point: bp_vp_state"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE %";
---source include/wait_condition.inc
-
-# Wait for row to be written to progress table.
---echo con1: Checking progress.
-let $wait_condition = SELECT backup_state = "validity point"
-                      FROM mysql.online_backup
-                      WHERE command LIKE "BACKUP DATABASE backup_progress%";
---source include/wait_condition.inc
-
---echo: Display progress
-SELECT backup_state FROM mysql.online_backup AS ob JOIN backup_progress.t1_res as t1 ON
ob.backup_id = t1.id;
-
---echo con1: Advance the lock.
-SELECT get_lock("bp_running_state", 0);
-
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con1: Checking locks.
-let $wait_condition = SELECT state = "debug_sync_point: bp_running_state"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE %";
---source include/wait_condition.inc
-
-# Wait for row to be written to progress table.
---echo con1: Checking progress.
-let $wait_condition = SELECT backup_state = "running"
-                      FROM mysql.online_backup
-                      WHERE command LIKE "BACKUP DATABASE backup_progress%";
---source include/wait_condition.inc
+--echo con1: Let backup do the backup phase2.
+SET DEBUG_SYNC= 'now SIGNAL do_phase2 WAIT_FOR phase2';
 
---echo: Display progress
+--echo con1: Display progress
 SELECT backup_state FROM mysql.online_backup AS ob JOIN backup_progress.t1_res as t1 ON
ob.backup_id = t1.id;
 
---echo con1: Advance the lock.
-SELECT release_lock("bp_running_state");
+--echo con1: Let backup finish.
+SET DEBUG_SYNC= 'now SIGNAL finish';
 
 connection con2;
 --echo con2: Finish backup command
@@ -164,59 +116,36 @@ connection con1;
 
 --echo Do restore of database
 
-SELECT get_lock("bp_starting_state", 0);
-
 connection con2;
 
 DELETE FROM backup_progress.t1_res;
+ 
+--echo con2: Activate sync points for the backup statement.
+SET DEBUG_SYNC= 'after_backup_log_init      SIGNAL started WAIT_FOR do_run';
+SET DEBUG_SYNC= 'after_backup_start_restore SIGNAL running WAIT_FOR finish';
 
 --echo con2: Send restore command.
 send RESTORE FROM 'backup_progress_orig.bak';
 
 connection con1;
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con1: Checking locks.
-let $wait_condition = SELECT state = "debug_sync_point: bp_starting_state"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "RESTORE FROM 'backup_progress_orig.bak'%";
---source include/wait_condition.inc
-
-# Wait for row to be written to progress table.
---echo con1: Checking progress.
-let $wait_condition = SELECT backup_state = "starting"
-                      FROM mysql.online_backup
-                      WHERE command LIKE "RESTORE FROM 'backup_progress_orig.bak'%";
---source include/wait_condition.inc
+--echo con1: Wait for the restore to be started.
+SET DEBUG_SYNC= 'now WAIT_FOR started';
 
---echo: Display progress
+--echo con1: Display progress
 select * from backup_progress.t1_res;
 SELECT MAX(backup_id) INTO @bup_id FROM mysql.online_backup WHERE command LIKE "RESTORE
FROM%";
 INSERT INTO backup_progress.t1_res (id) VALUES (@bup_id);
 SELECT backup_state FROM mysql.online_backup AS ob JOIN backup_progress.t1_res as t1 ON
ob.backup_id = t1.id;
 
---echo con1: Advance the lock.
-SELECT get_lock("bp_running_state", 0);
+--echo con1: Let restore step to running state.
+SET DEBUG_SYNC= 'now SIGNAL do_run WAIT_FOR running';
 
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con1: Checking locks.
-let $wait_condition = SELECT state = "debug_sync_point: bp_running_state"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "RESTORE FROM 'backup_progress_orig.bak'%";
---source include/wait_condition.inc
-
-# Wait for row to be written to progress table.
---echo con1: Checking progress.
-let $wait_condition = SELECT backup_state = "running"
-                      FROM mysql.online_backup
-                      WHERE command LIKE "RESTORE FROM 'backup_progress_orig.bak'%";
---source include/wait_condition.inc
-
---echo: Display progress
+--echo con1: Display progress
 SELECT backup_state FROM mysql.online_backup AS ob JOIN backup_progress.t1_res as t1 ON
ob.backup_id = t1.id;
 
---echo con1: Advance the lock.
-SELECT release_lock("bp_running_state");
+--echo con1: Let restore do its job and finish.
+SET DEBUG_SYNC= 'now SIGNAL finish';
 
 connection con2;
 --echo con2: Finish restore command
@@ -234,6 +163,10 @@ SELECT obp.* FROM mysql.online_backup_pr
 
 connection con1;
 
+#
+# Cleanup.
+#
+SET DEBUG_SYNC= 'reset';
 DROP DATABASE backup_progress;
 --remove_file $MYSQLTEST_VARDIR/master-data/backup_progress_orig.bak
 

=== modified file 'mysql-test/t/backup_security.test'
--- a/mysql-test/t/backup_security.test	2007-12-04 17:38:12 +0000
+++ b/mysql-test/t/backup_security.test	2008-06-25 13:39:04 +0000
@@ -45,15 +45,7 @@ FLUSH PRIVILEGES;
 BACKUP DATABASE backup_test to 'backup_test_orig.bak';
 
 --echo default: Connect as user with no rights and attempt backup and restore.
-
 connect (no_rights,localhost,bup_no_rights,,backup_test);
-connection no_rights;
-
-# Checking processes
-let $wait_condition = SELECT count(*) = 0
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
 
 --echo no_rights: Attempting backup. Should fail with error 1227
 --replace_column 1 #
@@ -72,15 +64,7 @@ SELECT * FROM backup_test.t1;
 disconnect no_rights;
 
 --echo Connect as user with rights and attempt backup and restore.
-
 connect (with_rights,localhost,bup_with_rights,,backup_test);
-connection with_rights;
-
-# Checking processes
-let $wait_condition = SELECT count(*) = 0
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
 
 --echo no_rights: Attempting backup. Should succeed
 --replace_column 1 #
@@ -94,15 +78,8 @@ SELECT * FROM backup_test.t1;
 
 disconnect with_rights;
 
-connection default;
-
-# Checking processes
-let $wait_condition = SELECT count(*) = 0
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
-
 --echo default: Do restore to ensure it still works with default test user.
+connection default;
 
 --replace_column 1 #
 RESTORE FROM 'backup_test_orig.bak';

=== modified file 'mysql-test/t/backup_snapshot.test'
--- a/mysql-test/t/backup_snapshot.test	2007-12-20 20:32:22 +0000
+++ b/mysql-test/t/backup_snapshot.test	2008-06-25 13:39:04 +0000
@@ -1,55 +1,47 @@
 #
-# This test is for the consistent snapshot online backup driver
+# This test is for the consistent snapshot online backup driver.
 # The test is designed to show that a consistent snapshot
 # backup can be taken while data is being inserted and deleted.
 #
 # The test is testing the driver to ensure it is entering a 
 # consistent read state during the backup. There are several
-# breakpoints in the code that can be used. The two most 
-# useful ones are:
+# synchronization points in the code that can be used.
+# The two most useful ones are:
 #
-#   backup_cs_unlock - occurs after consistent read 
+#   after_backup_cs_locked - occurs after consistent read 
 #     transaction has been started and before the open and
 #     lock tables.
 #
-#   backup_cs_reading - occurs after the open and lock
+#   when_backup_cs_reading - occurs after the open and lock
 #     tables during the read tables portion.
 #
 # The following tests test these conditions.
 #
-# 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
 
+#
+# Preparative cleanup.
+#
 --disable_warnings
+SET DEBUG_SYNC= 'reset';
 DROP DATABASE IF EXISTS bup_snapshot;
 --error 0,1
 --remove_file $MYSQLTEST_VARDIR/master-data/bup_snapshot.bak;
 --enable_warnings
 
-CREATE DATABASE bup_snapshot;
+--echo #
+--echo # Setup for tests.
+--echo #
 
 connect (con1,localhost,root,,);
 connect (con2,localhost,root,,);
-connect (con3,localhost,root,,);
 
 connection con1;
 
-# Setup the server to use the backup breakpoints
-SET GLOBAL debug="d,backup_debug:d,backup";
-
-#
-# Setup for tests.
-#
+CREATE DATABASE bup_snapshot;
 
 # Create a table and load it with lots of data.
 CREATE TABLE bup_snapshot.t1 (word CHAR(20)) ENGINE=INNODB;
@@ -74,59 +66,34 @@ SELECT * FROM bup_snapshot.t1 WHERE word
 SELECT COUNT(*) FROM bup_snapshot.t1;
 SELECT COUNT(*) FROM bup_snapshot.t2;
 
-connection con3;
-
-#
-# Test 1: Check for consistent read prior to open and lock tables
-#
-
---echo con3: Getting lock on driver.
-SELECT get_lock("backup_cs_locked", 100);
-
+--echo #
+--echo # Test 1: Check for consistent read prior to open and lock tables
+--echo #
 # While a consistent snapshot backup is executed,
 # no external inserts should be visible to the transaction.
 
-connection con1;
+--echo con1: Activate sync points for the backup statement.
+SET DEBUG_SYNC= 'after_backup_cs_locked SIGNAL locked WAIT_FOR inserting';
 
 --echo con1: Backing up database. Spawn this and continue...
 send BACKUP DATABASE bup_snapshot TO "bup_snapshot.bak";
 
-connection con3;
-
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con3: Checking locks.
-let $wait_condition = SELECT state = "debug_sync_point: backup_cs_locked"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE %";
---source include/wait_condition.inc
+connection con2;
 
-# Start an insert now that CS has a transaction 
+--echo con2: Wait for backup to have locked the transaction.
+SET DEBUG_SYNC= 'now WAIT_FOR locked';
+ 
+--echo con2: Start an insert now that CS has a transaction 
 # The commit blocker will block this until the read lock of 
 # the backup is released.
 
-connection con2;
-
-send INSERT INTO bup_snapshot.t1 VALUES("- Dave Mathews");
-
-connection con3;
-
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con3: Checking locks.
-let $wait_condition = SELECT count(*) = 1
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "INSERT INTO bup_snapshot.t1%";
---source include/wait_condition.inc
-
---echo con3: Release lock on driver.
-SELECT release_lock("backup_cs_locked");
-
-connection con1;
---replace_column 1 #
-reap;
+--echo con2: Activate sync points for the insert statement.
+SET DEBUG_SYNC= 'wait_if_global_read_lock SIGNAL inserting';
 
-connection con2;
+# Insert will wait in wait_if_global_read_lock() until backup is done.
+INSERT INTO bup_snapshot.t1 VALUES("- Dave Mathews");
 
-reap;
+--echo con2: insert additional rows.
 INSERT INTO bup_snapshot.t1 VALUES("- Yes");
 INSERT INTO bup_snapshot.t1 VALUES("- Jethro Tull");
 DELETE FROM bup_snapshot.t1 WHERE word LIKE '10%';
@@ -135,10 +102,14 @@ DELETE FROM bup_snapshot.t1 WHERE word L
 SELECT * FROM bup_snapshot.t1 WHERE word LIKE '-%';
 SELECT COUNT(*) FROM bup_snapshot.t1;
 
-# Now restore the database and then check to make sure the new rows
-# were not backed up.
+connection con1;
 
-connection con1; 
+--echo con1: retrieve backup result.
+--replace_column 1 #
+reap;
+
+--echo # Now restore the database and then check to make sure the new rows
+--echo # were not backed up.
 
 --echo con1: Dropping the database
 DROP TABLE bup_snapshot.t1;
@@ -154,55 +125,34 @@ SELECT COUNT(*) FROM bup_snapshot.t2;
 
 remove_file $MYSQLTEST_VARDIR/master-data/bup_snapshot.bak;
 
-#
-# Test 2: Check for consistent read after open and lock tables
-#
-
-connection con3;
-
---echo con3: Getting lock on driver.
-SELECT get_lock("backup_cs_reading", 100);
-
+--echo #
+--echo # Test 2: Check for consistent read after open and lock tables
+--echo #
 # While a consistent snapshot backup is executed,
 # no external inserts should be visible to the transaction.
 
-connection con1;
+--echo con1: Activate sync points for the backup statement.
+SET DEBUG_SYNC= 'when_backup_cs_reading SIGNAL reading WAIT_FOR inserting';
 
 --echo con1: Backing up database. Spawn this and continue...
 send BACKUP DATABASE bup_snapshot TO "bup_snapshot.bak";
 
-connection con3;
-
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con3: Checking locks.
-let $wait_condition = SELECT state = "debug_sync_point: backup_cs_reading"
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
+connection con2;
 
-# Start an insert now that CS has a transaction 
+--echo con2: Wait for backup to start reading.
+SET DEBUG_SYNC= 'now WAIT_FOR reading';
+ 
+--echo con2: Start an insert now that CS has a transaction 
 # The commit blocker will block this until the read lock of 
 # the backup is released.
 
-connection con2;
-
-send INSERT INTO bup_snapshot.t1 VALUES("- Dave Mathews");
-
-connection con3;
-
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con3: Checking locks.
-let $wait_condition = SELECT count(*) = 1
-                      FROM INFORMATION_SCHEMA.PROCESSLIST
-                      WHERE info LIKE "INSERT INTO bup_snapshot.t1%";
---source include/wait_condition.inc
-
---echo con3: Release lock on driver.
-SELECT release_lock("backup_cs_reading");
+--echo con2: Activate sync points for the insert statement.
+SET DEBUG_SYNC= 'after_insert_locked_tables SIGNAL inserting';
 
-connection con2;
+# Insert will wait in wait_if_global_read_lock() until backup is done.
+INSERT INTO bup_snapshot.t1 VALUES("- Dave Mathews");
 
-reap;
+--echo con2: insert additional rows.
 INSERT INTO bup_snapshot.t1 VALUES("- Yes");
 INSERT INTO bup_snapshot.t1 VALUES("- Jethro Tull");
 DELETE FROM bup_snapshot.t1 WHERE word LIKE '10%';
@@ -212,11 +162,13 @@ SELECT * FROM bup_snapshot.t1 WHERE word
 SELECT COUNT(*) FROM bup_snapshot.t1;
 
 connection con1;
+
+--echo con1: retrieve backup result.
 --replace_column 1 #
 reap;
 
-# Now restore the database and then check to make sure the new rows
-# were not backed up.
+--echo # Now restore the database and then check to make sure the new rows
+--echo # were not backed up.
 
 --echo con1: Dropping the database
 DROP TABLE bup_snapshot.t1;
@@ -230,7 +182,10 @@ SELECT * FROM bup_snapshot.t1 WHERE word
 SELECT COUNT(*) FROM bup_snapshot.t1;
 SELECT COUNT(*) FROM bup_snapshot.t2;
 
+#
+# Cleanup
+#
+SET DEBUG_SYNC= 'reset';
 DROP DATABASE bup_snapshot;
-
 remove_file $MYSQLTEST_VARDIR/master-data/bup_snapshot.bak;
 

=== modified file 'mysql-test/t/backup_view_on_view.test'
--- a/mysql-test/t/backup_view_on_view.test	2008-06-13 13:43:16 +0000
+++ b/mysql-test/t/backup_view_on_view.test	2008-06-25 13:39:04 +0000
@@ -27,3 +27,6 @@ RESTORE FROM 'test.bak';
 SELECT * FROM db1.v2;
 SELECT * FROM db1.v1;
 SELECT * FROM db1.t1;
+
+DROP DATABASE db1;
+

=== modified file 'mysql-test/t/character_set_server_func.test'
--- a/mysql-test/t/character_set_server_func.test	2008-04-10 13:14:28 +0000
+++ b/mysql-test/t/character_set_server_func.test	2008-06-25 13:39:04 +0000
@@ -18,6 +18,12 @@
 #  server-system-variables.html                                               #
 #                                                                             #
 ###############################################################################
+
+# Preparatory cleanup.
+--disable_warnings
+DROP DATABASE IF EXISTS db1;
+--enable_warnings
+
 --echo '#--------------------FN_DYNVARS_009_01-------------------------#'
 ######################################################################
 # Check if setting character_set_server is changed in new connection # 

=== modified file 'mysql-test/t/disabled.def'
--- a/mysql-test/t/disabled.def	2008-06-04 13:20:03 +0000
+++ b/mysql-test/t/disabled.def	2008-06-25 13:39:04 +0000
@@ -17,12 +17,6 @@ lowercase_table3         : Bug#32667 low
 rpl_log_pos          : Bug#8693 Test 'rpl_log_pos' fails sometimes
 ctype_create         : Bug#32965 main.ctype_create fails
 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_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
-backup_snapshot       :BUG#34235 pending replacement of test facility with WL#4259
 backup_no_engine     : Bug#36021 2008-04-13 rsomla server crashes when openning table
with unknown storage engine
 csv_alter_table      : Bug#33696 2008-01-21 pcrews no .result file - bug allows NULL
columns in CSV tables
 ctype_latin2_ch      : BUG #33791 2008-01-18 mats Wrong ORDER BY with latin2_czech_cs

=== modified file 'sql/backup/Makefile.am'
--- a/sql/backup/Makefile.am	2008-05-14 00:24:06 +0000
+++ b/sql/backup/Makefile.am	2008-06-25 13:39:04 +0000
@@ -52,7 +52,6 @@ noinst_HEADERS = \
   backup_kernel.h \
   backup_stream.h \
   stream_services.h \
-  debug.h \
   error.h \
   stream.h \
   backup_aux.h \

=== modified file 'sql/backup/backup_test.cc'
--- a/sql/backup/backup_test.cc	2008-03-17 13:37:42 +0000
+++ b/sql/backup/backup_test.cc	2008-06-25 13:39:04 +0000
@@ -22,7 +22,7 @@ int execute_backup_test_command(THD *thd
 {
   int res= 0;
 
-  DBUG_ENTER("execute_backup_command");
+  DBUG_ENTER("execute_backup_test_command");
   DBUG_ASSERT(thd);
 
   Protocol *protocol= thd->protocol;    // client comms

=== modified file 'sql/backup/be_default.cc'
--- a/sql/backup/be_default.cc	2008-06-12 19:54:19 +0000
+++ b/sql/backup/be_default.cc	2008-06-25 13:39:04 +0000
@@ -68,7 +68,6 @@
 #include "be_default.h"
 #include "backup_aux.h"
 #include "rpl_record.h"
-#include "debug.h"
 
 namespace default_backup {
 
@@ -331,7 +330,7 @@ result_t Backup::get_data(Buffer &buf)
     case LOCK_ACQUIRED:          // First time lock ready for validity point
     {
       locks_acquired= TRUE;
-      BACKUP_BREAKPOINT("locking_thread_added");
+      DEBUG_SYNC(locking_thd->m_thd, "locking_thread_added");
       DBUG_RETURN(READY);
     }
     default:                     // If first call, signal end of init phase

=== modified file 'sql/backup/be_snapshot.cc'
--- a/sql/backup/be_snapshot.cc	2008-06-12 17:43:47 +0000
+++ b/sql/backup/be_snapshot.cc	2008-06-25 13:39:04 +0000
@@ -44,7 +44,6 @@
 #include "backup_engine.h"
 #include "be_snapshot.h"
 #include "backup_aux.h"
-#include "debug.h"
 
 namespace snapshot_backup {
 
@@ -131,7 +130,8 @@ result_t Backup::lock()
     DBUG_RETURN(ERROR);
   m_trans_start= TRUE;
   locking_thd->lock_state= LOCK_ACQUIRED;
-  BACKUP_BREAKPOINT("backup_cs_locked");
+  DBUG_ASSERT(locking_thd->m_thd == current_thd);
+  DEBUG_SYNC(locking_thd->m_thd, "after_backup_cs_locked");
   DBUG_RETURN(OK);
 }
 
@@ -141,7 +141,6 @@ result_t Backup::get_data(Buffer &buf)
 
   if (!tables_open && (locking_thd->lock_state == LOCK_ACQUIRED))
   {
-    BACKUP_BREAKPOINT("backup_cs_open_tables");
     // The lex needs to be cleaned up between consecutive calls to 
     // open_and_lock_tables. Otherwise, open_and_lock_tables will try to open
     // previously opened views and crash.
@@ -151,7 +150,8 @@ result_t Backup::get_data(Buffer &buf)
   }
   if (locking_thd->lock_state == LOCK_ACQUIRED)
   {
-    BACKUP_BREAKPOINT("backup_cs_reading");
+    DBUG_ASSERT(locking_thd->m_thd == current_thd);
+    DEBUG_SYNC(locking_thd->m_thd, "when_backup_cs_reading");
   }
 
   res= default_backup::Backup::get_data(buf);

=== modified file 'sql/backup/data_backup.cc'
--- a/sql/backup/data_backup.cc	2008-06-05 12:26:31 +0000
+++ b/sql/backup/data_backup.cc	2008-06-25 13:39:04 +0000
@@ -19,7 +19,6 @@
 #include "backup_engine.h"
 #include "stream.h"
 #include "backup_progress.h"
-#include "debug.h"
 #include "be_default.h"  // needed for table locking code
 
 /***********************************************
@@ -409,7 +408,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);
 
@@ -425,14 +424,12 @@ int block_commits(THD *thd, TABLE_LIST *
     that do not take lock tables. Thus, it should apply to write locked
     tables only and only to non-transactional engines.
 
-    BACKUP_BREAKPOINT("commit_blocker_step_2");
     result= close_cached_tables(thd, 0, tables);
   */
 
   /*
     Step 3 - make the global read lock to block commits.
   */
-  BACKUP_BREAKPOINT("commit_blocker_step_3");
   if (make_global_read_lock_block_commit(thd))
   {
     /* Don't leave things in a half-locked state */
@@ -455,7 +452,6 @@ int block_commits(THD *thd, TABLE_LIST *
 int unblock_commits(THD *thd)
 {
   DBUG_ENTER("unblock_commits()");
-  BACKUP_BREAKPOINT("commit_blocker_step_5");
   unlock_global_read_lock(thd);
   DBUG_RETURN(0);
 }
@@ -529,7 +525,6 @@ int write_table_data(THD* thd, Backup_in
                             inactive.elements));
 
   DBUG_PRINT("backup_data",("-- INIT PHASE --"));
-  BACKUP_BREAKPOINT("data_init");
 
   /*
    Poll "at end" drivers activating inactive ones on the way.
@@ -592,7 +587,6 @@ int write_table_data(THD* thd, Backup_in
 
     // prepare for VP
     DBUG_PRINT("backup_data",("-- PREPARE PHASE --"));
-    BACKUP_BREAKPOINT("data_prepare");
 
     if (sch.prepare())
       goto error;
@@ -613,7 +607,7 @@ int write_table_data(THD* thd, Backup_in
       the backup progress. It is not to be used to indicate actual
       timing of the validity point.
     */
-    BACKUP_BREAKPOINT("bp_vp_state");
+    DEBUG_SYNC(thd, "after_backup_validated");
     
     /*
       Block commits.
@@ -627,7 +621,6 @@ int write_table_data(THD* thd, Backup_in
     if (error)
       goto error;
 
-    BACKUP_BREAKPOINT("data_lock");
     if (sch.lock())
       goto error;
 
@@ -642,15 +635,14 @@ 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;
@@ -667,13 +659,12 @@ int write_table_data(THD* thd, Backup_in
     }
 
     info.m_ctx.report_state(BUP_RUNNING);
-    BACKUP_BREAKPOINT("bp_running_state");
+    DEBUG_SYNC(thd, "after_backup_binlog");
 
     /**** VP creation (end) ********************************************/
 
     // get final data from drivers
     DBUG_PRINT("backup_data",("-- FINISH PHASE --"));
-    BACKUP_BREAKPOINT("data_finish");
 
     while (sch.finish_count > 0)
     if (sch.step())

=== removed file 'sql/backup/debug.h'
--- a/sql/backup/debug.h	2008-03-19 09:18:57 +0000
+++ b/sql/backup/debug.h	1970-01-01 00:00:00 +0000
@@ -1,231 +0,0 @@
-#ifndef _BACKUP_DEBUG_H
-#define _BACKUP_DEBUG_H
-
-#define BACKUP_BREAKPOINT_TIMEOUT 300
-
-/*
-  TODO
-  - decide how to configure DEBUG_BACKUP
- */
-
-#ifndef DBUG_OFF
-# define DBUG_BACKUP
-#endif
-
-
-/**
-  @page BACKUP_BREAKPOINT Online Backup Breakpoints
-  Macros for creating breakpoints during testing.
-
-  @section WHAT What are breakpoints?
-  Breakpoints are devices used to pause the execution of the backup system
-  at a certain point in the code. There is a timeout that you can specify
-  when you set the lock for the breakpoint (from get_lock() see below)
-  which will enable execution to continue after the period in seconds
-  expires.
-
-  The best use of these breakpoints is for pausing execution at critical
-  points in the backup code to allow proper testing of certain features.
-  For example, suppose you wanted to ensure the Consistent Snapshot driver
-  was working properly. To do so, you would need to ensure no new @INSERT
-  statements are executed while the data is being backed up. If you use
-  a breakpoint, you can set the breakpoint to pause the backup kernel at
-  the point where it has set the consistent read and is reading rows.
-  You can then insert some rows and release the breakpoint. The result
-  should contain all of the rows in the table except those that were
-  inserted once the consistent read was set.
-
-  @section USAGE How to use breakpoints.
-  To make a breakpoint available, you must add a macro call to the code.
-  Simply insert the macro call as follows. The @c breakpoint_name is a 
-  text string that must be unique among the breakpoints. It is used in 
-  the macro as a means of tagging the code for pausing and resuming
-  execution. Once the code is compiled, you can use a client connection
-  to set and release the breakpoint. Be sure to use a separate connection
-  for getting, checking, and releasing locks. 
-
-  <b><c>BACKUP_BREAKPOINT("<breakpoint_name>");</c></b>
-  
-  Breakpoints use the user-defined locking functions @c get_lock() to set
-  the breakpoint and @c release_lock() to release it.
-
-  @subsection SET Setting breakpoints.
-  To set an existing breakpoint, issue the following command where @c
-  timeout is the number of seconds execution will pause once the breakpoint
-  is reached before continuing execution.
-
-  <b><c>SELECT
get_lock("<breakpoint_name>",<timeout>);</c></b>
-
-  @subsection RELEASE Releasing breakpoints.
-  To release an existing breakpoint, issue the following command. This
-  releases execution allow the system to continue.
-
-  <b><c>SELECT release_lock("<breakpoint_name>");</c></b>
-
-  @subsection EXAMPLE Example - Testing the Consistent Snapshot Driver
-  To test the consistent snapshot driver, we can make use of the @c
-  backup_cs_locked breakpoint to pause execution after the consistent read
-  is initiated and before all of the rows from the table have been read.
-  Consider an InnoDB table with the following structure as our test table.
-
-  <c>CREATE TABLE t1 (a INT) ENGINE=INNODB;</c>
-
-  To perform this test using breakpoints, we need two client connections.
-  One will be used to execute the backup command and another to set and
-  release the breakpoint. In the first client, we set the breakpoint with
-  the <c>SELECT get_lock("backup_cs_locked", 100);</c> command. In the 
-  second client, we start the execution of the backup. We can return to
-  the first client and issue several @INSERT statements then issue the
-  <c>SELECT release_lock("backup_cs_locked");</c> command to release the
-  breakpoint.
-
-  We can then return to the second client, select all of the rows from the
-  table to verify the rows were inserted. We can verify that the consistent
-  snapshot worked by restoring the database (which is a destructive restore)
-  and then select all of the rows. This will show that the new rows 
-  inserted while the backup was running were not inserted into the table.
-  The following shows the output of the commands as described.
-
-  <b>First Client</b>
-  @code mysql> SELECT * FROM t1;
-  +---+
-  | a |
-  +---+
-  | 1 |
-  | 2 |
-  | 3 |
-  +---+
-  3 rows in set (0.00 sec)
-
-  mysql> SELECT get_lock("backup_cs_locked", 100);
-  +-----------------------------------+
-  | get_lock("backup_cs_locked", 100) |
-  +-----------------------------------+
-  |                                 1 |
-  +-----------------------------------+
-  1 row in set (0.00 sec) @endcode
-
-  <b>Second Client</b>
-  @code mysql> BACKUP DATABASE test TO 'test.bak'; @endcode
-
-  Note: The backup will pause while the breakpoint is set (the lock is held).
-
-  <b>First Client</b>
-  @code mysql> INSERT INTO t1 VALUES (101), (102), (103);
-  Query OK, 3 rows affected (0.02 sec)
-  Records: 3  Duplicates: 0  Warnings: 0
-
-  mysql> SELECT * FROM t1;
-  +-----+
-  | a   |
-  +-----+
-  |   1 |
-  |   2 |
-  |   3 |
-  | 101 |
-  | 102 |
-  | 103 |
-  +-----+
-  6 rows in set (0.00 sec)
-  
-  mysql> SELECT release_lock("backup_cs_locked");
-  +----------------------------------+
-  | release_lock("backup_cs_locked") |
-  +----------------------------------+
-  |                                1 |
-  +----------------------------------+
-  1 row in set (0.01 sec) @endcode
-
-  <b>Second Client</b>
-  @code +------------------------------+
-  | Backup Summary               |
-  +------------------------------+
-  |  header     =       14 bytes |
-  |  meta-data  =      120 bytes |
-  |  data       =       30 bytes |
-  |               -------------- |
-  |  total             164 bytes |
-  +------------------------------+
-  5 rows in set (33.45 sec)
-
-  mysql> SELECT * FROM t1;
-  +-----+
-  | a   |
-  +-----+
-  |   1 |
-  |   2 |
-  |   3 |
-  | 101 |
-  | 102 |
-  | 103 |
-  +-----+
-  6 rows in set (0.00 sec)
-  
-  mysql> RESTORE FROM 'test.bak';
-  +------------------------------+
-  | Restore Summary              |
-  +------------------------------+
-  |  header     =       14 bytes |
-  |  meta-data  =      120 bytes |
-  |  data       =       30 bytes |
-  |               -------------- |
-  |  total             164 bytes |
-  +------------------------------+
-  5 rows in set (0.08 sec)
-  
-  mysql> SELECT * FROM t1;
-  +---+
-  | a |
-  +---+
-  | 1 |
-  | 2 |
-  | 3 |
-  +---+
-  3 rows in set (0.00 sec)@endcode
-
-  Note: The backup will complete once breakpoint is released (the lock is
-  released).
-
-  @section BREAKPOINTS Breakpoints
-  The following are the available breakpoints included in the code.
-
-  - <b>backup_command</b>  Occurs at the start of the backup operation.
-  - <b>data_init</b>  Occurs at the start of the <b>INITIALIZE
PHASE</b>.
-  - <b>data_prepare</b>  Occurs at the start of the <b>PREPARE
PHASE</b>.
-  - <b>data_lock</b>  Occurs at the start of the <b>SYNC
PHASE</b>.
-  - <b>data_unlock</b>  Occurs before the unlock calls.
-  - <b>data_finish</b>  Occurs at the start of the <b>FINISH
PHASE</b>.
-  - <b>backup_meta</b>  Occurs before the call to write_meta_data().
-  - <b>backup_data</b>  Occurs before the call to write_table_data().
-  - <b>backup_done</b>  Occurs after the call to write_table_data() returns.
-  - <b>backup_cs_locked</b>  Consistent Snapshot - after the consistent
-                             read has been initiated but before rows are read.
-  - <b>backup_cs_open_tables</b>  Consistent Snapshot - before the call to
-                             open and lock tables.
-  - <b>backup_cs_reading</b>  Consistent Snapshot - occurs during read.
-
-  @section NOTES Developer Notes
-  - Breakpoints can be used in debug builds only. You must compile
-  the code using the @c DEBUG_EXTRA preprocessor directive. 
-  - When adding breakpoints, you must add a list item for each breakpoint
-  to the documentation for breakpoints. See the code for the macro
-  definition in @ref debug.h for details.
-  - 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.
-
- */
-
-/*
-  Consider: set thd->proc_info when waiting on lock
-*/
-#define BACKUP_BREAKPOINT(S) \
- do { \
-  DBUG_PRINT("backup",("== breakpoint on '%s' ==",(S))); \
-  DBUG_EXECUTE_IF("backup_debug", DBUG_SYNC_POINT((S),BACKUP_BREAKPOINT_TIMEOUT);); \
- } while (0)
-
-#endif

=== modified file 'sql/backup/kernel.cc'
--- a/sql/backup/kernel.cc	2008-05-21 10:45:55 +0000
+++ b/sql/backup/kernel.cc	2008-06-25 13:39:04 +0000
@@ -69,7 +69,6 @@
 #include "restore_info.h"
 #include "logger.h"
 #include "stream.h"
-#include "debug.h"
 #include "be_native.h"
 #include "be_default.h"
 #include "be_snapshot.h"
@@ -127,8 +126,6 @@ execute_backup_command(THD *thd, LEX *le
   DBUG_ENTER("execute_backup_command");
   DBUG_ASSERT(thd && lex);
 
-  BACKUP_BREAKPOINT("backup_command");
-
   using namespace backup;
 
   Backup_restore_ctx context(thd); // reports errors
@@ -148,7 +145,7 @@ execute_backup_command(THD *thd, LEX *le
     if (!info || !info->is_valid())
       DBUG_RETURN(send_error(context, ER_BACKUP_BACKUP_PREPARE));
 
-    BACKUP_BREAKPOINT("bp_running_state");
+    DEBUG_SYNC(thd, "after_backup_start_backup");
 
     // select objects to backup
 
@@ -181,7 +178,6 @@ execute_backup_command(THD *thd, LEX *le
     if (res)
       DBUG_RETURN(send_error(context, ER_BACKUP_BACKUP));
 
-    BACKUP_BREAKPOINT("bp_complete_state");
     break;
   }
 
@@ -192,7 +188,7 @@ execute_backup_command(THD *thd, LEX *le
     if (!info || !info->is_valid())
       DBUG_RETURN(send_error(context, ER_BACKUP_RESTORE_PREPARE));
     
-    BACKUP_BREAKPOINT("bp_running_state");
+    DEBUG_SYNC(thd, "after_backup_start_restore");
 
     res= context.do_restore();      
 
@@ -734,8 +730,6 @@ int Backup_restore_ctx::do_backup()
   Output_stream &s= *static_cast<Output_stream*>(m_stream);
   Backup_info   &info= *static_cast<Backup_info*>(m_catalog);
 
-  BACKUP_BREAKPOINT("backup_meta");
-
   report_stats_pre(info);
 
   DBUG_PRINT("backup",("Writing preamble"));
@@ -748,8 +742,6 @@ int Backup_restore_ctx::do_backup()
 
   DBUG_PRINT("backup",("Writing table data"));
 
-  BACKUP_BREAKPOINT("backup_data");
-
   if (write_table_data(m_thd, info, s)) // reports errors
     DBUG_RETURN(send_error(*this, ER_BACKUP_BACKUP));
 
@@ -764,7 +756,6 @@ int Backup_restore_ctx::do_backup()
   report_stats_post(info);
 
   DBUG_PRINT("backup",("Backup done."));
-  BACKUP_BREAKPOINT("backup_done");
 
   DBUG_RETURN(0);
 }

=== modified file 'sql/backup/logger.h'
--- a/sql/backup/logger.h	2008-03-21 09:57:45 +0000
+++ b/sql/backup/logger.h	2008-06-25 13:39:04 +0000
@@ -1,9 +1,9 @@
 #ifndef _BACKUP_LOGGER_H
 #define _BACKUP_LOGGER_H
 
+#include "mysql_priv.h"
 #include <backup_stream.h>
 #include <backup/error.h>
-#include <backup/debug.h>
 #include <backup/backup_progress.h>
 
 
@@ -130,7 +130,7 @@ int Logger::init(enum_type type, const L
   m_op_id= report_ob_init(m_thd, m_thd->id, BUP_STARTING, 
                           type == BACKUP ? OP_BACKUP : OP_RESTORE, 
                           0, "", path.str, query);  
-  BACKUP_BREAKPOINT("bp_starting_state");
+  DEBUG_SYNC(m_thd, "after_backup_log_init");
   return 0;
 }
 

=== modified file 'sql/backup/stream.h'
--- a/sql/backup/stream.h	2008-03-04 16:06:28 +0000
+++ b/sql/backup/stream.h	2008-06-25 13:39:04 +0000
@@ -5,7 +5,6 @@
 
 #include <backup/api_types.h>    // for Buffer definition
 #include <backup/image_info.h>
-#include <backup/debug.h>        // for definition of DBUG_BACKUP
 #include <backup/logger.h>
 
 /**

=== modified file 'sql/ddl_blocker.cc'
--- a/sql/ddl_blocker.cc	2007-12-12 20:13:31 +0000
+++ b/sql/ddl_blocker.cc	2008-06-25 13:39:04 +0000
@@ -110,7 +110,7 @@ void DDL_blocker_class::end_DDL()
 my_bool DDL_blocker_class::check_DDL_blocker(THD *thd)
 {
   DBUG_ENTER("check_DDL_blocker()");
-  BACKUP_BREAKPOINT("DDL_not_blocked");
+  DEBUG_SYNC(thd, "before_check_ddl_blocked");
 
   /*
     Check the ddl blocker condition. Rest until ddl blocker is released.
@@ -122,7 +122,7 @@ my_bool DDL_blocker_class::check_DDL_blo
     pthread_cond_wait(&COND_DDL_blocker, &THR_LOCK_DDL_is_blocked);
   start_DDL();
   thd->exit_cond("DDL blocker: Ok to run DDL");
-  BACKUP_BREAKPOINT("DDL_in_progress");
+  DEBUG_SYNC(thd, "after_start_ddl");
   DBUG_RETURN(TRUE);
 }
 
@@ -143,7 +143,7 @@ my_bool DDL_blocker_class::block_DDL(THD
 {
   DBUG_ENTER("block_DDL()");
 
-  BACKUP_BREAKPOINT("DDL_in_progress");
+  DEBUG_SYNC(thd, "before_block_ddl");
 
   /*
     Only 1 DDL blocking operation can run at a time.
@@ -159,8 +159,6 @@ my_bool DDL_blocker_class::block_DDL(THD
   DDL_blocked= TRUE;
   thd->exit_cond("DDL blocker: Ok to block DDL");
 
-  BACKUP_BREAKPOINT("DDL_blocker_blocked");
-
   /*
     Check the ddl blocker condition. Rest until ddl blocker is released.
   */
@@ -171,7 +169,7 @@ my_bool DDL_blocker_class::block_DDL(THD
     pthread_cond_wait(&COND_process_blocked, &THR_LOCK_DDL_blocker);
   thd->exit_cond("DDL blocker: DDL is now blocked");
 
-  BACKUP_BREAKPOINT("DDL_blocked");
+  DEBUG_SYNC(thd, "after_block_ddl");
   DBUG_RETURN(TRUE);
 }
 

=== modified file 'sql/ddl_blocker.h'
--- a/sql/ddl_blocker.h	2007-12-12 20:13:31 +0000
+++ b/sql/ddl_blocker.h	2008-06-25 13:39:04 +0000
@@ -4,7 +4,6 @@
   Header file for DDL blocker code.
  */
 #include "mysql_priv.h"
-#include "backup/debug.h"
 
 /**
    @class DDL_blocker_class

=== modified file 'sql/debug_sync.cc'
--- a/sql/debug_sync.cc	2008-05-28 15:25:24 +0000
+++ b/sql/debug_sync.cc	2008-06-25 13:39:04 +0000
@@ -259,7 +259,7 @@ 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 "C" void (*debug_sync_wait_for_lock_callback_ptr)(void);
 
@@ -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) */
 

=== modified file 'sql/handler.cc'
--- a/sql/handler.cc	2008-05-18 08:52:30 +0000
+++ b/sql/handler.cc	2008-06-25 13:39:04 +0000
@@ -27,7 +27,6 @@
 #include "rpl_filter.h"
 #include <myisampack.h>
 #include <errno.h>
-#include "backup/debug.h"
 
 #ifdef WITH_PARTITION_STORAGE_ENGINE
 #include "ha_partition.h"
@@ -1104,10 +1103,7 @@ int ha_commit_trans(THD *thd, bool all)
       goto end;
     }
 
-    /*
-      Breakpoints for backup testing.
-    */
-    BACKUP_BREAKPOINT("commit_blocker_step_1");
+    DEBUG_SYNC(thd, "within_ha_commit_trans");
 
     if (!trans->no_2pc && (rw_ha_count > 1))
     {

=== modified file 'sql/lock.cc'
--- a/sql/lock.cc	2008-05-27 19:47:15 +0000
+++ b/sql/lock.cc	2008-06-25 13:39:04 +0000
@@ -1423,9 +1423,33 @@ bool lock_global_read_lock(THD *thd)
   if (!thd->global_read_lock)
   {
     const char *old_message;
+    const char *new_message= "Waiting to get readlock";
     (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.
+
+      WARNING: 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 does use
+      enter_cond() and exit_cond() itself if a WAIT_FOR action is
+      executed in spite of the above warning.
+
+      Pre-set proc_info so that it is available immediately after the
+      sync point sends a SIGNAL. This makes tests more reliable.
+    */
+    if (protect_against_global_read_lock)
+    {
+      thd_proc_info(thd, new_message);
+      DEBUG_SYNC(thd, "wait_lock_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");
+                                new_message);
     DBUG_PRINT("info",
 	       ("waiting_for: %d  protect_against: %d",
 		waiting_for_read_lock, protect_against_global_read_lock));
@@ -1501,6 +1525,8 @@ bool wait_if_global_read_lock(THD *thd, 
   (void) pthread_mutex_lock(&LOCK_global_read_lock);
   if ((need_exit_cond= must_wait))
   {
+    const char *new_message= "Waiting for release of readlock";
+
     if (thd->global_read_lock)		// This thread had the read locks
     {
       if (is_not_commit)
@@ -1514,8 +1540,31 @@ 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.
+
+      WARNING: 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 does use
+      enter_cond() and exit_cond() itself if a WAIT_FOR action is
+      executed in spite of the above warning.
+
+      Pre-set proc_info so that it is available immediately after the
+      sync point sends a SIGNAL. This makes tests more reliable.
+    */
+    if (must_wait)
+    {
+      thd_proc_info(thd, new_message);
+      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");
+                                new_message);
     while (must_wait && ! thd->killed &&
 	   (!abort_on_refresh || thd->version == refresh_version))
     {
@@ -1527,7 +1576,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 +1603,8 @@ void start_waiting_global_read_lock(THD 
   DBUG_ASSERT(protect_against_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);

=== modified file 'sql/sql_delete.cc'
--- a/sql/sql_delete.cc	2008-05-08 16:01:15 +0000
+++ b/sql/sql_delete.cc	2008-06-25 13:39:04 +0000
@@ -23,7 +23,6 @@
 #include "sql_select.h"
 #include "sp_head.h"
 #include "sql_trigger.h"
-#include "backup/debug.h"
 
 /**
   Implement DELETE SQL word.
@@ -400,13 +399,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))

=== modified file 'sql/sql_insert.cc'
--- a/sql/sql_insert.cc	2008-05-27 19:47:15 +0000
+++ b/sql/sql_insert.cc	2008-06-25 13:39:04 +0000
@@ -61,7 +61,6 @@
 #include "sql_show.h"
 #include "slave.h"
 #include "rpl_mi.h"
-#include "backup/debug.h"
 #include "sql_audit.h"
 
 #ifndef EMBEDDED_LIBRARY
@@ -617,11 +616,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *t
   }
   lock_type= table_list->lock_type;
 
-  /*
-    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++;

=== modified file 'sql/sql_parse.cc'
--- a/sql/sql_parse.cc	2008-06-04 13:20:03 +0000
+++ b/sql/sql_parse.cc	2008-06-25 13:39:04 +0000
@@ -28,7 +28,6 @@
 #include "events.h"
 #include "sql_trigger.h"
 #include <ddl_blocker.h>
-#include "backup/debug.h"
 #include "sql_audit.h"
 
 #ifdef BACKUP_TEST
@@ -3870,10 +3869,7 @@ end_with_restore_list:
                xa_state_names[thd->transaction.xid_state.xa_state]);
       break;
     }
-    /*
-      Breakpoints for backup testing.
-    */
-    BACKUP_BREAKPOINT("backup_commit_blocker");
+    DEBUG_SYNC(thd, "before_begin_trans");
     if (begin_trans(thd))
       goto error;
     my_ok(thd);
@@ -3882,10 +3878,7 @@ end_with_restore_list:
     if (end_trans(thd, lex->tx_release ? COMMIT_RELEASE :
                               lex->tx_chain ? COMMIT_AND_CHAIN : COMMIT))
       goto error;
-    /*
-      Breakpoints for backup testing.
-    */
-    BACKUP_BREAKPOINT("backup_commit_blocker");
+    DEBUG_SYNC(thd, "after_commit");
     my_ok(thd);
     break;
   case SQLCOM_ROLLBACK:

Thread
bzr commit into mysql-6.0-backup branch (ingo.struewing:2640) Bug#34235,WL#4259Ingo Struewing25 Jun