mirror of
https://code.videolan.org/videolan/vlc
synced 2024-10-03 01:31:53 +02:00
Privatize the object pipe lock
This commit is contained in:
parent
31bdf929bc
commit
a22e0f2783
@ -370,6 +370,8 @@ error:
|
|||||||
#define close( a ) closesocket (a)
|
#define close( a ) closesocket (a)
|
||||||
#endif /* WIN32 */
|
#endif /* WIN32 */
|
||||||
|
|
||||||
|
static vlc_mutex_t pipe_lock = VLC_STATIC_MUTEX;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the readable end of a pipe that becomes readable once termination
|
* Returns the readable end of a pipe that becomes readable once termination
|
||||||
* of the object is requested (vlc_object_kill()).
|
* of the object is requested (vlc_object_kill()).
|
||||||
@ -386,7 +388,7 @@ int vlc_object_waitpipe( vlc_object_t *obj )
|
|||||||
{
|
{
|
||||||
vlc_object_internals_t *internals = vlc_internals( obj );
|
vlc_object_internals_t *internals = vlc_internals( obj );
|
||||||
|
|
||||||
vlc_object_lock (obj);
|
vlc_mutex_lock (&pipe_lock);
|
||||||
if (internals->pipes[0] == -1)
|
if (internals->pipes[0] == -1)
|
||||||
{
|
{
|
||||||
/* This can only ever happen if someone killed us without locking: */
|
/* This can only ever happen if someone killed us without locking: */
|
||||||
@ -407,7 +409,7 @@ int vlc_object_waitpipe( vlc_object_t *obj )
|
|||||||
write (internals->pipes[1], &(uint64_t){ 1 }, sizeof (uint64_t));
|
write (internals->pipes[1], &(uint64_t){ 1 }, sizeof (uint64_t));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
vlc_object_unlock (obj);
|
vlc_mutex_unlock (&pipe_lock);
|
||||||
return internals->pipes[0];
|
return internals->pipes[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -422,7 +424,7 @@ void __vlc_object_kill( vlc_object_t *p_this )
|
|||||||
int fd = -1;
|
int fd = -1;
|
||||||
|
|
||||||
vlc_thread_cancel( p_this );
|
vlc_thread_cancel( p_this );
|
||||||
vlc_object_lock( p_this );
|
vlc_mutex_lock( &pipe_lock );
|
||||||
if( !p_this->b_die )
|
if( !p_this->b_die )
|
||||||
{
|
{
|
||||||
fd = priv->pipes[1];
|
fd = priv->pipes[1];
|
||||||
@ -430,7 +432,7 @@ void __vlc_object_kill( vlc_object_t *p_this )
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* This also serves as a memory barrier toward vlc_object_alive(): */
|
/* This also serves as a memory barrier toward vlc_object_alive(): */
|
||||||
vlc_object_unlock( p_this );
|
vlc_mutex_unlock( &pipe_lock );
|
||||||
|
|
||||||
if (fd != -1)
|
if (fd != -1)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user