]> git.sesse.net Git - vlc/blobdiff - src/libvlc.c
Disable horribly broken Bonjour code.
[vlc] / src / libvlc.c
index 191ef8635cedfdbb08f8d1a18156b8e65f7da5c5..3c8df8f9c2bf2c6b0047670db6d53f8da344141d 100644 (file)
@@ -120,14 +120,14 @@ static bool b_daemon = false;
  */
 void *vlc_gc_init (gc_object_t *p_gc, void (*pf_destruct) (gc_object_t *))
 {
-    /* There is no point in using the GC if there is destructor... */
+    /* There is no point in using the GC if there is no destructor... */
     assert (pf_destruct);
     p_gc->pf_destructor = pf_destruct;
 
     p_gc->refs = 1;
 #if defined (__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)
     __sync_synchronize ();
-#elif defined (WIN32)
+#elif defined (WIN32) && defined (__GNUC__)
 #elif defined(__APPLE__)
     OSMemoryBarrier ();
 #else
@@ -150,20 +150,19 @@ void *vlc_hold (gc_object_t * p_gc)
     assert( p_gc );
 
 #if defined (__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)
-    refs = __sync_fetch_and_add (&p_gc->refs, 1);
-#elif defined (WIN32)
-    refs = -1 +
-        __builtin_choose_expr (sizeof (uintptr_t) == 4,
-            InterlockedIncrement (&p_gc->refs),
-            InterlockedIncrement64 (&p_gc->refs));
+    refs = __sync_add_and_fetch (&p_gc->refs, 1);
+#elif defined (WIN32) && defined (__GNUC__)
+    refs = __builtin_choose_expr (sizeof (uintptr_t) == 4,
+               InterlockedIncrement (&p_gc->refs),
+               InterlockedIncrement64 (&p_gc->refs));
 #elif defined(__APPLE__)
-    refs = OSAtomicIncrement32Barrier((int*)&p_gc->refs) - 1;
+    refs = OSAtomicIncrement32Barrier((int*)&p_gc->refs);
 #else
     vlc_spin_lock (&p_gc->spin);
-    refs = p_gc->refs++;
+    refs = ++p_gc->refs;
     vlc_spin_unlock (&p_gc->spin);
 #endif
-    assert (refs > 0);
+    assert (refs != 1); /* there had to be a reference already */
     return p_gc;
 }
 
@@ -178,24 +177,24 @@ void vlc_release (gc_object_t *p_gc)
     assert( p_gc );
 
 #if defined (__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)
-    refs = __sync_fetch_and_sub (&p_gc->refs, 1);
-#elif defined (WIN32)
-    refs = 1 +
-        __builtin_choose_expr (sizeof (uintptr_t) == 4,
-            InterlockedDecrement (&p_gc->refs),
-            InterlockedDecrement64 (&p_gc->refs));
+    refs = __sync_sub_and_fetch (&p_gc->refs, 1);
+#elif defined (WIN32) && defined (__GNUC__)
+    refs = __builtin_choose_expr (sizeof (uintptr_t) == 4,
+               InterlockedDecrement (&p_gc->refs),
+               InterlockedDecrement64 (&p_gc->refs));
 #elif defined(__APPLE__)
-    refs = OSAtomicDecrement32Barrier((int*)&p_gc->refs) + 1;
+    refs = OSAtomicDecrement32Barrier((int*)&p_gc->refs);
 #else
     vlc_spin_lock (&p_gc->spin);
-    refs = p_gc->refs--;
+    refs = --p_gc->refs;
     vlc_spin_unlock (&p_gc->spin);
 #endif
 
-    assert (refs > 0);
-    if (refs == 1)
+    assert (refs != (uintptr_t)(-1)); /* reference underflow?! */
+    if (refs == 0)
     {
 #ifdef USE_SYNC
+#elif defined (WIN32) && defined (__GNUC__)
 #elif defined(__APPLE__)
 #else
         vlc_spin_destroy (&p_gc->spin);
@@ -820,6 +819,8 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
     vlc_mutex_init( &p_libvlc->p_stats->lock );
     priv->p_stats_computer = NULL;
 
+    priv->i_last_input_id = 0; /* Not very safe, should be removed */
+
     /*
      * Initialize hotkey handling
      */