Commit 3832b71b authored by unknown's avatar unknown
Browse files

Apply innodb-5.0-ss1372 snapshot

Bug #27381: InnoDB exits when attempting to rename table to non-existant database
  Fix Bug#27381 by calling os_file_handle_error_no_exit() instead of
  os_file_handle_error().


innobase/dict/dict0dict.c:
  Apply innodb-5.0-ss1372 snapshot
  
  Revision r1351:
  branches/5.0: Merge r1350 from trunk:
  
  Lock the data dictionary during rollback.  This removes the rare
  debug assertion failure ut_ad(mutex_own(&(dict_sys->mutex))) in
  dict_table_get_on_id() after the rollback following crash recovery.
innobase/os/os0file.c:
  Apply innodb-5.0-ss1372 snapshot
  
  Revision r1354:
  branches/5.0: Merge r1352 from trunk:
  (also make indentation the same as in 5.1 to ease further merges)
  
  Fix typo in comment in os/os0file.c
  
  
  
  Revision r1370:
  branches/5.0: Merge r1366 from trunk:
  
  Fix Bug#27381 by calling os_file_handle_error_no_exit() instead of
  os_file_handle_error().
innobase/row/row0undo.c:
  Apply innodb-5.0-ss1372 snapshot
  
  Revision r1351:
  branches/5.0: Merge r1350 from trunk:
  
  Lock the data dictionary during rollback.  This removes the rare
  debug assertion failure ut_ad(mutex_own(&(dict_sys->mutex))) in
  dict_table_get_on_id() after the rollback following crash recovery.
parent 465cf738
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -628,7 +628,8 @@ dict_table_get_on_id(
		CREATE, for example, we already have the mutex! */

#ifdef UNIV_SYNC_DEBUG
		ut_ad(mutex_own(&(dict_sys->mutex)));
		ut_ad(mutex_own(&(dict_sys->mutex))
		      || trx->dict_operation_lock_mode == RW_X_LATCH);
#endif /* UNIV_SYNC_DEBUG */

		return(dict_table_get_on_id_low(table_id, trx));
+10 −10
Original line number Diff line number Diff line
@@ -922,7 +922,7 @@ os_file_create_simple(
	file = CreateFile((LPCTSTR) name,
			  access,
			  FILE_SHARE_READ | FILE_SHARE_WRITE,
					/* file can be read ansd written also
			  /* file can be read and written also
			  by other processes */
			  NULL,	/* default security attributes */
			  create_flag,
@@ -1494,7 +1494,7 @@ os_file_rename(
		return(TRUE);
	}

	os_file_handle_error(oldpath, "rename");
	os_file_handle_error_no_exit(oldpath, "rename");

	return(FALSE);
#else
@@ -1503,7 +1503,7 @@ os_file_rename(
	ret = rename((const char*)oldpath, (const char*)newpath);

	if (ret != 0) {
		os_file_handle_error(oldpath, "rename");
		os_file_handle_error_no_exit(oldpath, "rename");

		return(FALSE);
	}
+10 −10
Original line number Diff line number Diff line
@@ -212,7 +212,7 @@ row_undo(
	ulint	err;
	trx_t*	trx;
	dulint	roll_ptr;
	ibool	froze_data_dict	= FALSE;
	ibool	locked_data_dict;
	
	ut_ad(node && thr);
	
@@ -265,13 +265,13 @@ row_undo(
	/* Prevent DROP TABLE etc. while we are rolling back this row.
	If we are doing a TABLE CREATE or some other dictionary operation,
	then we already have dict_operation_lock locked in x-mode. Do not
        try to lock again in s-mode, because that would cause a hang. */
	try to lock again, because that would cause a hang. */

	if (trx->dict_operation_lock_mode == 0) {
	locked_data_dict = (trx->dict_operation_lock_mode == 0);

	        row_mysql_freeze_data_dictionary(trx);
	if (locked_data_dict) {

	        froze_data_dict = TRUE;
		row_mysql_lock_data_dictionary(trx);
	}

	if (node->state == UNDO_NODE_INSERT) {
@@ -284,9 +284,9 @@ row_undo(
		err = row_undo_mod(node, thr);
	}

	if (froze_data_dict) {
	if (locked_data_dict) {

	        row_mysql_unfreeze_data_dictionary(trx);
		row_mysql_unlock_data_dictionary(trx);
	}

	/* Do some cleanup */