#define vlc_object_wait( obj ) \
__vlc_object_wait( VLC_OBJECT( obj ) )
+/* NOTE: this function is a *temporary* convenience.
+ * See the vlc_object_alive() documentation for a better alternative.
+ */
static inline
vlc_bool_t __vlc_object_lock_and_wait( vlc_object_t *obj )
{
- vlc_bool_t b;
+ vlc_bool_t b = VLC_TRUE;
vlc_object_lock( obj );
- b = obj->b_die ? VLC_TRUE : vlc_object_wait( obj );
+ if( vlc_object_alive( obj ) )
+ b = vlc_object_wait( obj );
vlc_object_unlock( obj );
return b;
}
#define vlc_object_kill(a) \
__vlc_object_kill( VLC_OBJECT(a) )
+VLC_EXPORT( vlc_bool_t, __vlc_object_alive, ( vlc_object_t * ) );
+#define vlc_object_alive(a) \
+ __vlc_object_alive( VLC_OBJECT(a) )
+
int vlc_object_waitpipe( vlc_object_t *obj );
p_intf->p_sys->p_connection = dbus_init( p_intf );
#endif
- for(;;)
+ while( vlc_object_alive( p_intf ) )
{
vlc_object_t *p_vout;
/* Check screensaver every 30 seconds */
if( vlc_object_timedwait( p_intf, mdate() + 30000000 ) < 0 )
- break;
+ continue;
p_vout = vlc_object_find( p_intf, VLC_OBJECT_VOUT, FIND_ANYWHERE );
}
+/**
+ * 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...
+
+ if (vlc_object_wait (self))
+ continue;
+
+ ...postprocessing...
+ }
+ ...deinitialization...
+ vlc_object_unlock (self);
+ *
+ *
+ * @return true iff the object has not been killed yet
+ */
+vlc_bool_t __vlc_object_alive( vlc_object_t *obj )
+{
+ vlc_assert_locked( &obj->object_lock );
+ return !obj->b_die;
+}
+
+
/**
* Signals an object for which the lock is held.
*/