Commit graph

20 commits

Author SHA1 Message Date
Davi Arnaut
152df97da1 WL#5498: Remove dead and unused source code
Remove wrappers around inline -- static inline is used without
wrappers throughout the source code. We rely on the compiler or
linker to eliminate unused static functions.
2010-07-23 17:18:36 -03:00
Davi Arnaut
3a22d332c7 Bug#22320: my_atomic-t unit test fails
Bug#52261: 64 bit atomic operations do not work on Solaris i386
           gcc in debug compilation

One of the various problems was that the source operand to
CMPXCHG8b was marked as a input/output operand, causing GCC
to use the EBX register as the destination register for the
CMPXCHG8b instruction. This could lead to crashes as the EBX
register is also implicitly used by the instruction, causing
the value to be potentially garbaged and a protection fault
once the value is used to access a position in memory.

Another problem was the lack of proper clobbers for the atomic
operations and, also, a discrepancy between the implementations
for the Compare and Set operation. The specific problems are
described and fixed by Kristian Nielsen patches:

Patch: 1

Fix bugs in my_atomic_cas*(val,cmp,new) that *cmp is accessed
after CAS succeds.

In the gcc builtin implementation, problem was that *cmp was
read again after atomic CAS to check if old *val == *cmp;
this fails if CAS is successful and another thread modifies
*cmp in-between.

In the x86-gcc implementation, problem was that *cmp was set
also in the case of successful CAS; this means there is a
window where it can clobber a value written by another thread
after successful CAS.

Patch 2:

Add a GCC asm "memory" clobber to primitives that imply a
memory barrier.

This signifies to GCC that any potentially aliased memory
must be flushed before the operation, and re-read after the
operation, so that read or modification in other threads of
such memory values will work as intended.

In effect, it makes these primitives work as memory barriers
for the compiler as well as the CPU. This is better and more
correct than adding "volatile" to variables.
2010-07-23 09:37:10 -03:00
Alexander Nozdrin
b6e0f92f05 Auto-merge from mysql-next-mr-bugfixing. 2010-02-23 18:49:21 +03:00
Konstantin Osipov
1e6b33ec0f Fix compiler warnings in my_atomic.h 2010-02-19 17:20:29 +03:00
Vladislav Vaintroub
236a0a7945 prettification of package names and fix compile bug on OSX/ppc 2010-01-28 11:09:05 +01:00
Sergei Golubchik
18d082109c fix atomic/solaris.h to conform
remove duplicated boilerplate code
2009-12-23 09:27:41 +01:00
Mikael Ronstrom
5bce1e0642 Yet one more fix for Solaris atomics in builds 2009-12-19 18:24:52 +01:00
Mikael Ronstrom
1a6d85eab6 Fixed Solaris build issues 2009-12-19 17:44:45 +01:00
Mikael Ronstrom
56d81f3bc1 Fixed solaris builds 2009-12-19 12:48:39 +01:00
Mikael Ronstrom
fe1287ea68 Fixed 64-bit atomics on Win x86 and removed support for 8 and 16-bit atomic operations 2009-12-15 17:07:43 +01:00
Mikael Ronstrom
c4ce446f19 Backported my_atomic from 6.0-codebase and added support for 64-bit atomics to enable removal of LOCK_thread_count from every query, removed LOCK_thread_count from use in dispatch_command and close of query which is used in every query, now uses atomic increments/decrements instead 2009-10-12 11:00:39 +02:00
Mikael Ronstrom
6e4f01fa8b Moved atomics from 6.0 codebase to prepare for using atomic increments in places where LOCK_thread_count previously was used 2009-10-09 14:21:29 +02:00
Mikael Ronstrom
c45bd8ce96 Performance patch: Mysql atomic patch 2008-10-13 22:03:12 +02:00
jani@hynda.mysql.fi
d6f7a6a1ec Fixes to merge between 5.1-main and 5.1-marvel 2007-10-15 18:22:19 +03:00
serg@janus.mylan
045d704709 move intptr from my_atomic.h to my_global.h 2007-01-28 21:12:58 +01:00
kent@mysql.com/kent-amd64.(none)
1e3237fefa Many files:
Changed header to GPL version 2 only
2006-12-27 02:23:51 +01:00
serg@janus.mylan
12dc638abd compile-time definition of intptr type 2006-08-01 14:02:19 +02:00
serg@serg.mylan
5e2777b445 support for xadd emulation, workaround for Darwin 2006-06-29 15:39:53 +02:00
serg@serg.mylan
48c453a40b atomic ops:
my_atomic_XX_t -> intXX, no implicit locking anymore
    simplified framework, support for requested cleanups
2006-06-17 16:20:39 +02:00
serg@serg.mylan
efdf221d49 WL#2595 - atomic operations 2006-05-31 18:44:09 +02:00