mirror of
https://github.com/MariaDB/server.git
synced 2025-05-28 13:01:41 +03:00
Merge mysql.sashanet.com:/home/sasha/src/bk/mysql
into mysql.sashanet.com:/home/sasha/src/bk/mysql-4.0 BitKeeper/etc/logging_ok: auto-union sql/slave.cc: Auto merged sql/sql_repl.cc: Auto merged
This commit is contained in:
commit
980262092a
@ -1,6 +1,7 @@
|
|||||||
|
heikki@donna.mysql.fi
|
||||||
jani@janikt.pp.saunalahti.fi
|
jani@janikt.pp.saunalahti.fi
|
||||||
monty@hundin.mysql.fi
|
monty@hundin.mysql.fi
|
||||||
|
monty@work.mysql.com
|
||||||
mwagner@evoq.mwagner.org
|
mwagner@evoq.mwagner.org
|
||||||
sasha@mysql.sashanet.com
|
sasha@mysql.sashanet.com
|
||||||
tonu@hundin.mysql.fi
|
tonu@hundin.mysql.fi
|
||||||
monty@work.mysql.com
|
|
||||||
|
@ -94,10 +94,12 @@ mutex_test_and_set(
|
|||||||
|
|
||||||
/* In assembly we use the so-called AT & T syntax where
|
/* In assembly we use the so-called AT & T syntax where
|
||||||
the order of operands is inverted compared to the ordinary Intel
|
the order of operands is inverted compared to the ordinary Intel
|
||||||
syntax. The 'l' after the mnemonics denotes a 32-bit operation. */
|
syntax. The 'l' after the mnemonics denotes a 32-bit operation.
|
||||||
|
The line after the code tells which values come out of the asm
|
||||||
|
code, and the second line tells the input to the asm code. */
|
||||||
|
|
||||||
asm volatile("movl $1, %%eax; xchgl (%%ecx), %%eax" :
|
asm volatile("movl $1, %%eax; xchgl (%%ecx), %%eax" :
|
||||||
"=eax" (res):
|
"=eax" (res), "=m" (*lw) :
|
||||||
"ecx" (lw));
|
"ecx" (lw));
|
||||||
return(res);
|
return(res);
|
||||||
#else
|
#else
|
||||||
@ -132,12 +134,26 @@ mutex_reset_lock_word(
|
|||||||
__asm MOV EDX, 0
|
__asm MOV EDX, 0
|
||||||
__asm MOV ECX, lw
|
__asm MOV ECX, lw
|
||||||
__asm XCHG EDX, DWORD PTR [ECX]
|
__asm XCHG EDX, DWORD PTR [ECX]
|
||||||
|
#elif defined(__GNUC__) && defined(UNIV_INTEL_X86)
|
||||||
|
ulint* lw;
|
||||||
|
|
||||||
|
lw = &(mutex->lock_word);
|
||||||
|
|
||||||
|
/* In assembly we use the so-called AT & T syntax where
|
||||||
|
the order of operands is inverted compared to the ordinary Intel
|
||||||
|
syntax. The 'l' after the mnemonics denotes a 32-bit operation. */
|
||||||
|
|
||||||
|
asm volatile("movl $0, %%eax; xchgl (%%ecx), %%eax" :
|
||||||
|
"=m" (*lw) :
|
||||||
|
"ecx" (lw) :
|
||||||
|
"eax"); /* gcc does not seem to understand
|
||||||
|
that our asm code resets eax: tell it
|
||||||
|
explicitly that after the third ':' */
|
||||||
#else
|
#else
|
||||||
mutex->lock_word = 0;
|
mutex->lock_word = 0;
|
||||||
#if !(defined(__GNUC__) && defined(UNIV_INTEL_X86))
|
|
||||||
os_fast_mutex_unlock(&(mutex->os_fast_mutex));
|
os_fast_mutex_unlock(&(mutex->os_fast_mutex));
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
|
@ -970,9 +970,10 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len)
|
|||||||
(actual_error = thd->net.last_errno) && expected_error)
|
(actual_error = thd->net.last_errno) && expected_error)
|
||||||
{
|
{
|
||||||
const char* errmsg = "Slave: did not get the expected error\
|
const char* errmsg = "Slave: did not get the expected error\
|
||||||
running query from master - expected: '%s', got '%s'";
|
running query from master - expected: '%s'(%d), got '%s'(%d)";
|
||||||
sql_print_error(errmsg, ER(expected_error),
|
sql_print_error(errmsg, ER(expected_error), expected_error,
|
||||||
actual_error ? thd->net.last_error:"no error"
|
actual_error ? thd->net.last_error:"no error",
|
||||||
|
actual_error
|
||||||
);
|
);
|
||||||
thd->query_error = 1;
|
thd->query_error = 1;
|
||||||
}
|
}
|
||||||
|
@ -764,14 +764,18 @@ int change_master(THD* thd)
|
|||||||
// if we change host or port, we must reset the postion
|
// if we change host or port, we must reset the postion
|
||||||
glob_mi.log_file_name[0] = 0;
|
glob_mi.log_file_name[0] = 0;
|
||||||
glob_mi.pos = 4; // skip magic number
|
glob_mi.pos = 4; // skip magic number
|
||||||
|
glob_mi.pending = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(lex_mi->log_file_name)
|
if(lex_mi->log_file_name)
|
||||||
strmake(glob_mi.log_file_name, lex_mi->log_file_name,
|
strmake(glob_mi.log_file_name, lex_mi->log_file_name,
|
||||||
sizeof(glob_mi.log_file_name));
|
sizeof(glob_mi.log_file_name));
|
||||||
if(lex_mi->pos)
|
if(lex_mi->pos)
|
||||||
|
{
|
||||||
glob_mi.pos = lex_mi->pos;
|
glob_mi.pos = lex_mi->pos;
|
||||||
|
glob_mi.pending = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if(lex_mi->host)
|
if(lex_mi->host)
|
||||||
{
|
{
|
||||||
strmake(glob_mi.host, lex_mi->host, sizeof(glob_mi.host));
|
strmake(glob_mi.host, lex_mi->host, sizeof(glob_mi.host));
|
||||||
|
@ -37,7 +37,8 @@
|
|||||||
#define SHAREDIR "share/"
|
#define SHAREDIR "share/"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ER(X) errmesg[(X)-1000]
|
#define ER(X) ((X) >= 1000 && (X) < ER_ERROR_MESSAGES + 1000) ? \
|
||||||
|
errmesg[(X)-1000] : "Invalid error code"
|
||||||
|
|
||||||
#define ERRMAPP 1 /* Errormap f|r my_error */
|
#define ERRMAPP 1 /* Errormap f|r my_error */
|
||||||
#define LIBLEN FN_REFLEN-FN_LEN /* Max l{ngd p} dev */
|
#define LIBLEN FN_REFLEN-FN_LEN /* Max l{ngd p} dev */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user