Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
511fd82b
Commit
511fd82b
authored
Dec 14, 2011
by
Michael Widenius
Browse files
Options
Browse Files
Download
Plain Diff
Merge with 5.2
parents
43c8a6ac
1a985a17
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
123 additions
and
30 deletions
+123
-30
config/ac-macros/readline.m4
config/ac-macros/readline.m4
+30
-9
configure.in
configure.in
+26
-3
mysql-test/std_data/bug887051.txt
mysql-test/std_data/bug887051.txt
+2
-0
mysql-test/suite/maria/r/maria-recovery3.result
mysql-test/suite/maria/r/maria-recovery3.result
+22
-0
mysql-test/suite/maria/t/maria-recovery3.test
mysql-test/suite/maria/t/maria-recovery3.test
+18
-0
sql/sql_show.cc
sql/sql_show.cc
+0
-9
storage/maria/ha_maria.cc
storage/maria/ha_maria.cc
+10
-2
storage/maria/ma_delete.c
storage/maria/ma_delete.c
+3
-2
storage/maria/ma_key_recover.c
storage/maria/ma_key_recover.c
+4
-1
storage/maria/ma_recovery.c
storage/maria/ma_recovery.c
+4
-0
storage/pbxt/src/lock_xt.h
storage/pbxt/src/lock_xt.h
+4
-4
No files found.
config/ac-macros/readline.m4
View file @
511fd82b
...
@@ -40,23 +40,44 @@ AC_DEFUN([MYSQL_CHECK_LIBEDIT_INTERFACE], [
...
@@ -40,23 +40,44 @@ AC_DEFUN([MYSQL_CHECK_LIBEDIT_INTERFACE], [
])
])
AC_DEFUN([MYSQL_CHECK_NEW_RL_INTERFACE], [
AC_DEFUN([MYSQL_CHECK_NEW_RL_INTERFACE], [
AC_CACHE_CHECK([
defined rl_compentry_func_t and rl_completion_func_t
], mysql_cv_new_rl_interface,
AC_CACHE_CHECK([
for system libreadline
], mysql_cv_new_rl_interface,
AC_
TRY_COMPIL
E(
AC_
COMPILE_IFELS
E(
[
[
AC_LANG_SOURCE([
#include "stdio.h"
#include "stdio.h"
#include "readline/readline.h"
#include "readline/readline.h"
],
[
rl_completion_func_t *func1= (rl_completion_func_t*)0;
rl_completion_func_t *func1= (rl_completion_func_t*)0;
rl_compentry_func_t *func2= (rl_compentry_func_t*)0;
rl_compentry_func_t *func2= (rl_compentry_func_t*)0;
],
]
)]
,
[
[
mysql_cv_new_rl_interface=yes
AC_PREPROC_IFELSE(
AC_DEFINE_UNQUOTED([USE_NEW_READLINE_INTERFACE], [1],
[AC_LANG_SOURCE([
[used new readline interface (are rl_completion_func_t and rl_compentry_func_t defined)])
#include "stdio.h"
#include "readline/readline.h"
#if RL_VERSION_MAJOR > 5
#error
#endif
])], [ rl_v5=yes ], [ rl_v5=no ],
)
if [test "$rl_v5" = "yes"]
then
mysql_cv_new_rl_interface=yes
else
if [test "$enable_distribution" = "yes"]
then
mysql_cv_new_rl_interface=no
else
mysql_cv_new_rl_interface=yes
enable_distribution=warn
fi
fi
],
],
[mysql_cv_new_rl_interface=no]
[mysql_cv_new_rl_interface=no]
)
)
if [test "$mysql_cv_new_rl_interface" = yes]
then
AC_DEFINE_UNQUOTED([USE_NEW_READLINE_INTERFACE], [1],
[used new readline interface (are rl_completion_func_t and rl_compentry_func_t defined)])
fi
)
)
])
])
...
...
configure.in
View file @
511fd82b
...
@@ -633,6 +633,14 @@ AC_ARG_WITH(other-libc,
...
@@ -633,6 +633,14 @@ AC_ARG_WITH(other-libc,
)
)
AC_SUBST
(
NOINST_LDFLAGS
)
AC_SUBST
(
NOINST_LDFLAGS
)
AC_ARG_ENABLE
(
distribution,
AC_HELP_STRING
(
[
--disable-distribution
]
,
[
Allow linking with system GPLv3 libraries. It may result
in
a binary that can not be legally distributed.]
)
,
[
enable_distribution
=
$enableval
]
,
[
enable_distribution
=
yes
]
)
#
#
# Check if we are using Linux and a glibc compiled with static nss
# Check if we are using Linux and a glibc compiled with static nss
# (this is true on the MySQL build machines to avoid NSS problems)
# (this is true on the MySQL build machines to avoid NSS problems)
...
@@ -1575,7 +1583,7 @@ fi
...
@@ -1575,7 +1583,7 @@ fi
AC_MSG_CHECKING
([
for
OpenSolaris Bug 6611808]
)
AC_MSG_CHECKING
([
for
OpenSolaris Bug 6611808]
)
save_CFLAGS
=
"
$CFLAGS
"
save_CFLAGS
=
"
$CFLAGS
"
CFLAGS
=
"
$CFLAGS
-Werror"
CFLAGS
=
"
$CFLAGS
-Werror"
AC_COMPILE_IFELSE
([
AC_COMPILE_IFELSE
([
AC_LANG_SOURCE
([
#include <pthread.h>
#include <pthread.h>
void dummy
()
{}
void dummy
()
{}
int main
()
int main
()
...
@@ -1584,7 +1592,7 @@ AC_COMPILE_IFELSE([
...
@@ -1584,7 +1592,7 @@ AC_COMPILE_IFELSE([
pthread_once
(
&once_control, dummy
)
;
pthread_once
(
&once_control, dummy
)
;
return
0
;
return
0
;
}
}
]
,
[
]
)]
,
[
AC_DEFINE
([
PTHREAD_ONCE_INITIALIZER],
[{
PTHREAD_ONCE_INIT
}]
,
AC_DEFINE
([
PTHREAD_ONCE_INITIALIZER],
[{
PTHREAD_ONCE_INIT
}]
,
[
See OpenSolaris Bug 6611808]
)
[
See OpenSolaris Bug 6611808]
)
AC_MSG_RESULT
([
yes
])
AC_MSG_RESULT
([
yes
])
...
@@ -2724,6 +2732,8 @@ case $SYSTEM_TYPE in
...
@@ -2724,6 +2732,8 @@ case $SYSTEM_TYPE in
compile_libedit
=
yes
compile_libedit
=
yes
AC_DEFINE_UNQUOTED
(
HAVE_HIST_ENTRY, 1
)
AC_DEFINE_UNQUOTED
(
HAVE_HIST_ENTRY, 1
)
AC_DEFINE_UNQUOTED
(
USE_LIBEDIT_INTERFACE, 1
)
AC_DEFINE_UNQUOTED
(
USE_LIBEDIT_INTERFACE, 1
)
AC_MSG_CHECKING
([
for
libedit/readline]
)
AC_MSG_RESULT
([
libedit bundled]
)
elif
test
"
$with_readline
"
=
"yes"
elif
test
"
$with_readline
"
=
"yes"
then
then
readline_topdir
=
"cmd-line-utils"
readline_topdir
=
"cmd-line-utils"
...
@@ -2734,6 +2744,8 @@ case $SYSTEM_TYPE in
...
@@ -2734,6 +2744,8 @@ case $SYSTEM_TYPE in
compile_readline
=
yes
compile_readline
=
yes
want_to_use_readline
=
"yes"
want_to_use_readline
=
"yes"
AC_DEFINE_UNQUOTED
(
USE_NEW_READLINE_INTERFACE, 1
)
AC_DEFINE_UNQUOTED
(
USE_NEW_READLINE_INTERFACE, 1
)
AC_MSG_CHECKING
([
for
libedit/readline]
)
AC_MSG_RESULT
([
readline bundled]
)
else
else
# Use system readline library
# Use system readline library
AC_LANG_SAVE
AC_LANG_SAVE
...
@@ -2748,12 +2760,16 @@ case $SYSTEM_TYPE in
...
@@ -2748,12 +2760,16 @@ case $SYSTEM_TYPE in
# this way we avoid linking commercial source with GPL readline
# this way we avoid linking commercial source with GPL readline
readline_link
=
"-lreadline"
readline_link
=
"-lreadline"
want_to_use_readline
=
"yes"
want_to_use_readline
=
"yes"
AC_MSG_CHECKING
([
for
libedit/readline]
)
AC_MSG_RESULT
([
readline system]
)
elif
[
test
"
$mysql_cv_libedit_interface
"
=
"yes"
]
elif
[
test
"
$mysql_cv_libedit_interface
"
=
"yes"
]
then
then
# Use libedit
# Use libedit
readline_link
=
"-ledit"
readline_link
=
"-ledit"
AC_MSG_CHECKING
([
for
libedit/readline]
)
AC_MSG_RESULT
([
libedit system]
)
else
else
AC_MSG_ERROR
([
Could not find system readline or libedit libraries
AC_MSG_ERROR
([
Could not find
usable
system readline or libedit libraries
Use
--with-readline
or
--with-libedit
to use the bundled
Use
--with-readline
or
--with-libedit
to use the bundled
versions of libedit or readline]
)
versions of libedit or readline]
)
fi
fi
...
@@ -2998,6 +3014,13 @@ if test X"$with_plugin_ndbcluster" = Xyes ; then
...
@@ -2998,6 +3014,13 @@ if test X"$with_plugin_ndbcluster" = Xyes ; then
echo for more details.
echo for more details.
fi
fi
if test "$enable_distribution" = "warn"
then
echo "You have linked MariaDB with GPLv3 libraries!"
echo "You may not distribute the resulting binary. If you do, you will "
echo "put yourself into a legal problem with Free Software Foundation."
fi
# The first line "Thank you ..." is checked in ./Do-compile to verify that configure
# The first line "Thank you ..." is checked in ./Do-compile to verify that configure
# ended sucessfully - don'
t remove it.
# ended sucessfully - don'
t remove it.
echo
""
echo
""
...
...
mysql-test/std_data/bug887051.txt
0 → 100644
View file @
511fd82b
saved1
saved2
mysql-test/suite/maria/r/maria-recovery3.result
View file @
511fd82b
...
@@ -89,6 +89,28 @@ check table t1 extended;
...
@@ -89,6 +89,28 @@ check table t1 extended;
Table Op Msg_type Msg_text
Table Op Msg_type Msg_text
mysqltest.t1 check status OK
mysqltest.t1 check status OK
drop table t1;
drop table t1;
CREATE TABLE t1 ( word VARCHAR(255) PRIMARY KEY ) ENGINE=Aria;
LOAD DATA INFILE '../../std_data/bug887051.txt' INTO TABLE t1;
SET AUTOCOMMIT=0;
DELETE FROM t1;
LOAD DATA INFILE '../../std_data/bug887051.txt' INTO TABLE t1 IGNORE 1 LINES;
COMMIT;
SET SESSION debug="+d,maria_flush_whole_log,maria_crash";
* crashing mysqld intentionally
set global aria_checkpoint_interval=1;
ERROR HY000: Lost connection to MySQL server during query
* recovery happens
check table t1 extended;
Table Op Msg_type Msg_text
mysqltest.t1 check status OK
* testing that checksum after recovery is as expected
Checksum-check
failure
use mysqltest;
select * from t1;
word
saved2
drop table t1;
drop database mysqltest_for_feeding_recovery;
drop database mysqltest_for_feeding_recovery;
drop database mysqltest_for_comparison;
drop database mysqltest_for_comparison;
drop database mysqltest;
drop database mysqltest;
mysql-test/suite/maria/t/maria-recovery3.test
View file @
511fd82b
...
@@ -109,6 +109,24 @@ truncate table t1;
...
@@ -109,6 +109,24 @@ truncate table t1;
check
table
t1
extended
;
check
table
t1
extended
;
drop
table
t1
;
drop
table
t1
;
#
# Test for BUG#887051; Failure in recovery with delete
#
let
$mvr_restore_old_snapshot
=
0
;
let
$mms_compare_physically
=
0
;
let
$mvr_debug_option
=
"+d,maria_flush_whole_log,maria_crash"
;
let
$mvr_crash_statement
=
set
global
aria_checkpoint_interval
=
1
;
CREATE
TABLE
t1
(
word
VARCHAR
(
255
)
PRIMARY
KEY
)
ENGINE
=
Aria
;
LOAD
DATA
INFILE
'../../std_data/bug887051.txt'
INTO
TABLE
t1
;
SET
AUTOCOMMIT
=
0
;
DELETE
FROM
t1
;
LOAD
DATA
INFILE
'../../std_data/bug887051.txt'
INTO
TABLE
t1
IGNORE
1
LINES
;
COMMIT
;
--
source
include
/
maria_verify_recovery
.
inc
select
*
from
t1
;
drop
table
t1
;
# clean up everything
# clean up everything
let
$mms_purpose
=
feeding_recovery
;
let
$mms_purpose
=
feeding_recovery
;
eval
drop
database
mysqltest_for_
$mms_purpose
;
eval
drop
database
mysqltest_for_
$mms_purpose
;
...
...
sql/sql_show.cc
View file @
511fd82b
...
@@ -760,7 +760,6 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list)
...
@@ -760,7 +760,6 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list)
Protocol
*
protocol
=
thd
->
protocol
;
Protocol
*
protocol
=
thd
->
protocol
;
char
buff
[
2048
];
char
buff
[
2048
];
String
buffer
(
buff
,
sizeof
(
buff
),
system_charset_info
);
String
buffer
(
buff
,
sizeof
(
buff
),
system_charset_info
);
char
*
save_db
,
*
save_table_name
;
bool
retval
=
TRUE
;
// Assume error
bool
retval
=
TRUE
;
// Assume error
List
<
Item
>
field_list
;
List
<
Item
>
field_list
;
DBUG_ENTER
(
"mysqld_show_create"
);
DBUG_ENTER
(
"mysqld_show_create"
);
...
@@ -770,10 +769,6 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list)
...
@@ -770,10 +769,6 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list)
/* We want to preserve the tree for views. */
/* We want to preserve the tree for views. */
thd
->
lex
->
context_analysis_only
|=
CONTEXT_ANALYSIS_ONLY_VIEW
;
thd
->
lex
->
context_analysis_only
|=
CONTEXT_ANALYSIS_ONLY_VIEW
;
/* Store original names if called from SP */
save_db
=
table_list
->
db
;
save_table_name
=
table_list
->
table_name
;
{
{
Show_create_error_handler
view_error_suppressor
(
thd
,
table_list
);
Show_create_error_handler
view_error_suppressor
(
thd
,
table_list
);
thd
->
push_internal_handler
(
&
view_error_suppressor
);
thd
->
push_internal_handler
(
&
view_error_suppressor
);
...
@@ -857,11 +852,7 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list)
...
@@ -857,11 +852,7 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list)
retval
=
FALSE
;
// ok
retval
=
FALSE
;
// ok
error:
error:
/* Restore table list if called by stored procedure */
table_list
->
db
=
save_db
;
table_list
->
table_name
=
save_table_name
;
DBUG_RETURN
(
retval
);
DBUG_RETURN
(
retval
);
}
}
bool
mysqld_show_create_db
(
THD
*
thd
,
char
*
dbname
,
bool
mysqld_show_create_db
(
THD
*
thd
,
char
*
dbname
,
...
...
storage/maria/ha_maria.cc
View file @
511fd82b
...
@@ -2562,8 +2562,16 @@ int ha_maria::extra_opt(enum ha_extra_function operation, ulong cache_size)
...
@@ -2562,8 +2562,16 @@ int ha_maria::extra_opt(enum ha_extra_function operation, ulong cache_size)
int
ha_maria
::
delete_all_rows
()
int
ha_maria
::
delete_all_rows
()
{
{
THD
*
thd
=
table
->
in_use
;
THD
*
thd
=
table
->
in_use
;
(
void
)
translog_log_debug_info
(
file
->
trn
,
LOGREC_DEBUG_INFO_QUERY
,
#ifdef EXTRA_DEBUG
(
uchar
*
)
thd
->
query
(),
thd
->
query_length
());
TRN
*
trn
=
file
->
trn
;
if
(
trn
&&
!
(
trnman_get_flags
(
trn
)
&
TRN_STATE_INFO_LOGGED
))
{
trnman_set_flags
(
trn
,
trnman_get_flags
(
trn
)
|
TRN_STATE_INFO_LOGGED
|
TRN_STATE_TABLES_CAN_CHANGE
);
(
void
)
translog_log_debug_info
(
trn
,
LOGREC_DEBUG_INFO_QUERY
,
(
uchar
*
)
thd
->
query
(),
thd
->
query_length
());
}
#endif
if
(
file
->
s
->
now_transactional
&&
if
(
file
->
s
->
now_transactional
&&
((
table
->
in_use
->
options
&
(
OPTION_NOT_AUTOCOMMIT
|
OPTION_BEGIN
))
||
((
table
->
in_use
->
options
&
(
OPTION_NOT_AUTOCOMMIT
|
OPTION_BEGIN
))
||
table
->
in_use
->
locked_tables
))
table
->
in_use
->
locked_tables
))
...
...
storage/maria/ma_delete.c
View file @
511fd82b
...
@@ -1481,8 +1481,9 @@ my_bool _ma_log_delete(MARIA_PAGE *ma_page, const uchar *key_pos,
...
@@ -1481,8 +1481,9 @@ my_bool _ma_log_delete(MARIA_PAGE *ma_page, const uchar *key_pos,
MARIA_SHARE
*
share
=
info
->
s
;
MARIA_SHARE
*
share
=
info
->
s
;
my_off_t
page
=
ma_page
->
pos
/
share
->
block_size
;
my_off_t
page
=
ma_page
->
pos
/
share
->
block_size
;
DBUG_ENTER
(
"_ma_log_delete"
);
DBUG_ENTER
(
"_ma_log_delete"
);
DBUG_PRINT
(
"enter"
,
(
"page: %lu changed_length: %u move_length: %d"
,
DBUG_PRINT
(
"enter"
,
(
"page: %lu offset: %u changed_length: %u move_length: %u append_length: %u page_size: %u"
,
(
ulong
)
page
,
changed_length
,
move_length
));
(
ulong
)
page
,
offset
,
changed_length
,
move_length
,
append_length
,
ma_page
->
size
));
DBUG_ASSERT
(
share
->
now_transactional
&&
move_length
);
DBUG_ASSERT
(
share
->
now_transactional
&&
move_length
);
DBUG_ASSERT
(
offset
+
changed_length
<=
ma_page
->
size
);
DBUG_ASSERT
(
offset
+
changed_length
<=
ma_page
->
size
);
DBUG_ASSERT
(
ma_page
->
org_size
-
move_length
+
append_length
==
ma_page
->
size
);
DBUG_ASSERT
(
ma_page
->
org_size
-
move_length
+
append_length
==
ma_page
->
size
);
...
...
storage/maria/ma_key_recover.c
View file @
511fd82b
...
@@ -945,7 +945,7 @@ uint _ma_apply_redo_index(MARIA_HA *info,
...
@@ -945,7 +945,7 @@ uint _ma_apply_redo_index(MARIA_HA *info,
const
uchar
*
header_end
=
header
+
head_length
;
const
uchar
*
header_end
=
header
+
head_length
;
uint
page_offset
=
0
,
org_page_length
;
uint
page_offset
=
0
,
org_page_length
;
uint
page_length
,
keypage_header
,
keynr
;
uint
page_length
,
keypage_header
,
keynr
;
uint
max_page_size
=
share
->
max_index_block_size
;
uint
max_page_size
=
share
->
max_index_block_size
,
new_page_length
=
0
;
int
result
;
int
result
;
MARIA_PAGE
page
;
MARIA_PAGE
page
;
DBUG_ENTER
(
"_ma_apply_redo_index"
);
DBUG_ENTER
(
"_ma_apply_redo_index"
);
...
@@ -1106,6 +1106,8 @@ uint _ma_apply_redo_index(MARIA_HA *info,
...
@@ -1106,6 +1106,8 @@ uint _ma_apply_redo_index(MARIA_HA *info,
case
KEY_OP_DEBUG_2
:
case
KEY_OP_DEBUG_2
:
DBUG_PRINT
(
"redo"
,
(
"org_page_length: %u new_page_length: %u"
,
DBUG_PRINT
(
"redo"
,
(
"org_page_length: %u new_page_length: %u"
,
uint2korr
(
header
),
uint2korr
(
header
+
2
)));
uint2korr
(
header
),
uint2korr
(
header
+
2
)));
DBUG_ASSERT
(
uint2korr
(
header
)
==
page_length
);
new_page_length
=
uint2korr
(
header
+
2
);
header
+=
4
;
header
+=
4
;
break
;
break
;
case
KEY_OP_MAX_PAGELENGTH
:
case
KEY_OP_MAX_PAGELENGTH
:
...
@@ -1171,6 +1173,7 @@ uint _ma_apply_redo_index(MARIA_HA *info,
...
@@ -1171,6 +1173,7 @@ uint _ma_apply_redo_index(MARIA_HA *info,
}
}
}
while
(
header
<
header_end
);
}
while
(
header
<
header_end
);
DBUG_ASSERT
(
header
==
header_end
);
DBUG_ASSERT
(
header
==
header_end
);
DBUG_ASSERT
(
new_page_length
==
0
||
new_page_length
==
page_length
);
/* Write modified page */
/* Write modified page */
page
.
size
=
page_length
;
page
.
size
=
page_length
;
...
...
storage/maria/ma_recovery.c
View file @
511fd82b
...
@@ -3592,6 +3592,10 @@ my_bool _ma_reenable_logging_for_table(MARIA_HA *info, my_bool flush_pages)
...
@@ -3592,6 +3592,10 @@ my_bool _ma_reenable_logging_for_table(MARIA_HA *info, my_bool flush_pages)
if
(
flush_pages
)
if
(
flush_pages
)
{
{
/* Ensure that recover is not executing any redo before this */
if
(
!
maria_in_recovery
)
share
->
state
.
is_of_horizon
=
share
->
state
.
create_rename_lsn
=
share
->
state
.
skip_redo_lsn
=
translog_get_horizon
();
/*
/*
We are going to change callbacks; if a page is flushed at this moment
We are going to change callbacks; if a page is flushed at this moment
this can cause race conditions, that's one reason to flush pages
this can cause race conditions, that's one reason to flush pages
...
...
storage/pbxt/src/lock_xt.h
View file @
511fd82b
...
@@ -67,9 +67,9 @@ inline void xt_atomic_inc1(volatile xtWord1 *mptr)
...
@@ -67,9 +67,9 @@ inline void xt_atomic_inc1(volatile xtWord1 *mptr)
#elif defined(XT_ATOMIC_GNUC_X86)
#elif defined(XT_ATOMIC_GNUC_X86)
xtWord1
val
;
xtWord1
val
;
asm
volatile
(
"movb %1,%0"
:
"=
r
"
(
val
)
:
"m"
(
*
mptr
)
:
"memory"
);
asm
volatile
(
"movb %1,%0"
:
"=
q
"
(
val
)
:
"m"
(
*
mptr
)
:
"memory"
);
val
++
;
val
++
;
asm
volatile
(
"xchgb %1,%0"
:
"=
r
"
(
val
)
:
"m"
(
*
mptr
),
"0"
(
val
)
:
"memory"
);
asm
volatile
(
"xchgb %1,%0"
:
"=
q
"
(
val
)
:
"m"
(
*
mptr
),
"0"
(
val
)
:
"memory"
);
#elif defined(XT_ATOMIC_SOLARIS_LIB)
#elif defined(XT_ATOMIC_SOLARIS_LIB)
atomic_inc_8
(
mptr
);
atomic_inc_8
(
mptr
);
#else
#else
...
@@ -91,9 +91,9 @@ inline xtWord1 xt_atomic_dec1(volatile xtWord1 *mptr)
...
@@ -91,9 +91,9 @@ inline xtWord1 xt_atomic_dec1(volatile xtWord1 *mptr)
#elif defined(XT_ATOMIC_GNUC_X86)
#elif defined(XT_ATOMIC_GNUC_X86)
xtWord1
val2
;
xtWord1
val2
;
asm
volatile
(
"movb %1, %0"
:
"=
r
"
(
val
)
:
"m"
(
*
mptr
)
:
"memory"
);
asm
volatile
(
"movb %1, %0"
:
"=
q
"
(
val
)
:
"m"
(
*
mptr
)
:
"memory"
);
val
--
;
val
--
;
asm
volatile
(
"xchgb %1,%0"
:
"=
r
"
(
val2
)
:
"m"
(
*
mptr
),
"0"
(
val
)
:
"memory"
);
asm
volatile
(
"xchgb %1,%0"
:
"=
q
"
(
val2
)
:
"m"
(
*
mptr
),
"0"
(
val
)
:
"memory"
);
/* Should work, but compiler makes a mistake?
/* Should work, but compiler makes a mistake?
* asm volatile ("xchgb %1, %0" : : "r" (val), "m" (*mptr) : "memory");
* asm volatile ("xchgb %1, %0" : : "r" (val), "m" (*mptr) : "memory");
*/
*/
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment