#define vlc_object_kill(a) \
__vlc_object_kill( VLC_OBJECT(a) )
-VLC_EXPORT( bool, __vlc_object_alive, ( vlc_object_t * ) );
+static inline bool __vlc_object_alive (vlc_object_t *obj)
+{
+ barrier ();
+ return !obj->b_die;
+}
+
#define vlc_object_alive(a) \
__vlc_object_alive( VLC_OBJECT(a) )
}
-/**
- * Checks whether an object has been "killed".
- * The object lock must be held.
- *
- * Typical code for an object thread could be:
- *
- vlc_object_lock (self);
- ...initialization...
- while (vlc_object_alive (self))
- {
- ...preprocessing...
-
- vlc_object_wait (self);
-
- ...postprocessing...
- }
- ...deinitialization...
- vlc_object_unlock (self);
- *
- *
- * @return true iff the object has not been killed yet
- */
-bool __vlc_object_alive( vlc_object_t *obj )
-{
- vlc_assert_locked( &(vlc_internals(obj)->lock) );
- return !obj->b_die;
-}
-
-
/**
* Signals an object for which the lock is held.
* At least one thread currently sleeping in vlc_object_wait() or
}
vlc_object_signal_unlocked( p_this );
+ /* This also serves as a memory barrier toward vlc_object_alive(): */
vlc_object_unlock( p_this );
}