Another attempt at fixing mono_atomic_load_acquire() on MSVC. Fixes #13340.
authorZoltan Varga <vargaz@gmail.com>
Sat, 20 Jul 2013 04:05:49 +0000 (06:05 +0200)
committerZoltan Varga <vargaz@gmail.com>
Sat, 20 Jul 2013 04:05:49 +0000 (06:05 +0200)
mono/metadata/appdomain.c
mono/utils/mono-memory-model.h

index e07bbc9fb4740db6f33d841adbea8ae05e9620bf..e12c117ee7634fad6b26617c19494f0150a09f2e 100644 (file)
@@ -2181,7 +2181,7 @@ unload_data_unref (unload_data *data)
 {
        gint32 count;
        do {
-               count = mono_atomic_load_acquire (gint32, &data->refcount);
+               mono_atomic_load_acquire (count, gint32, &data->refcount);
                g_assert (count >= 1 && count <= 2);
                if (count == 1) {
                        g_free (data);
index cf44be678fb800bf50edb7a08ec8a56b1e01c3c7..a97a7cc16b213dcd170ee94ab7032a69450d5aad 100644 (file)
@@ -158,10 +158,11 @@ Acquire/release semantics macros.
        __tmp = *target;        \
        __tmp; })
 
-#define mono_atomic_load_acquire(_type,target) ({      \
+#define mono_atomic_load_acquire(var,_type,target) do {        \
        _type __tmp = *target;  \
        LOAD_ACQUIRE_FENCE;     \
-       __tmp; })
+       (var) = __tmp; \
+} while (0)
 
 #define mono_atomic_store_acquire(target,value) {      \
        *target = value;        \