Commit a22e0f27 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Privatize the object pipe lock

parent 31bdf929
...@@ -370,6 +370,8 @@ error: ...@@ -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 ) ...@@ -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 ) ...@@ -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 ) ...@@ -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 ) ...@@ -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)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment