Fix MSVC compiler specific issues in lock-free-alloc.c
authorJonathan Chambers <joncham@gmail.com>
Fri, 31 Aug 2012 02:08:23 +0000 (22:08 -0400)
committerJonathan Chambers <joncham@gmail.com>
Fri, 31 Aug 2012 02:08:23 +0000 (22:08 -0400)
mono/utils/lock-free-alloc.c

index 72b762247ba446495945d82b5e5ef2f797db4b5c..4c95990ddee397a9d853ed086f97ee8e5e2d086e 100644 (file)
@@ -374,7 +374,7 @@ alloc_from_active_or_partial (MonoLockFreeAllocator *heap)
        do {
                unsigned int next;
 
-               new_anchor = old_anchor = (Anchor)*(volatile gint32*)&desc->anchor.value;
+               new_anchor = old_anchor = *(volatile Anchor*)&desc->anchor.value;
                if (old_anchor.data.state == STATE_EMPTY) {
                        /* We must free it because we own it. */
                        desc_retire (desc);
@@ -477,7 +477,7 @@ mono_lock_free_free (gpointer ptr)
        g_assert (SB_HEADER_FOR_ADDR (ptr) == SB_HEADER_FOR_ADDR (sb));
 
        do {
-               new_anchor = old_anchor = (Anchor)*(volatile gint32*)&desc->anchor.value;
+               new_anchor = old_anchor = *(volatile Anchor*)&desc->anchor.value;
                *(unsigned int*)ptr = old_anchor.data.avail;
                new_anchor.data.avail = ((char*)ptr - (char*)sb) / desc->slot_size;
                g_assert (new_anchor.data.avail < SB_USABLE_SIZE / desc->slot_size);
@@ -531,7 +531,11 @@ descriptor_check_consistency (Descriptor *desc, gboolean print)
 {
        int count = desc->anchor.data.count;
        int max_count = SB_USABLE_SIZE / desc->slot_size;
+#if _MSC_VER
+       gboolean* linked = alloca(max_count*sizeof(gboolean));
+#else
        gboolean linked [max_count];
+#endif
        int i, last;
        unsigned int index;