Mingw support for garbage collection
authorRémi Denis-Courmont <rdenis@simphalempin.com>
Sat, 20 Sep 2008 14:22:53 +0000 (17:22 +0300)
committerRémi Denis-Courmont <rdenis@simphalempin.com>
Sun, 21 Sep 2008 15:59:20 +0000 (18:59 +0300)
(Received no comments on the mailing lists)

src/libvlc.c

index a4f4dcb..ee87b4c 100644 (file)
@@ -154,7 +154,12 @@ void *vlc_hold (gc_object_t * p_gc)
     uintptr_t refs;
     assert( p_gc );
 
-#ifdef USE_SYNC
+#if defined (WIN32)
+    refs = -1 +
+        __builtin_choose_expr (sizeof (uintptr_t) == 4,
+            InterlockedIncrement (&p_gc->refs),
+            InterlockedIncrement64 (&p_gc->refs));
+#elif defined (USE_SYNC)
     refs = __sync_fetch_and_add (&p_gc->refs, 1);
 #elif defined(__APPLE__)
     refs = OSAtomicIncrement32Barrier((int*)&p_gc->refs) - 1;
@@ -177,7 +182,12 @@ void vlc_release (gc_object_t *p_gc)
 
     assert( p_gc );
 
-#ifdef USE_SYNC
+#if defined (WIN32)
+    refs = 1 +
+        __builtin_choose_expr (sizeof (uintptr_t) == 4,
+            InterlockedDecrement (&p_gc->refs),
+            InterlockedDecrement64 (&p_gc->refs));
+#elif defined (USE_SYNC)
     refs = __sync_fetch_and_sub (&p_gc->refs, 1);
 #elif defined(__APPLE__)
     refs = OSAtomicDecrement32Barrier((int*)&p_gc->refs) + 1;