[vlc-devel] commit: objects: Call vlc_object_join()automatically from vlc_object_destructor() if needed. (Pierred'Herbemont )

Pierre d'Herbemont pdherbemont at free.fr
Tue Mar 25 18:16:26 CET 2008


On Mar 25, 2008, at 3:15 PM, Remi Denis-Courmont wrote:
>
> On Tue, 25 Mar 2008 11:02:21 +0100, Pierre d'Herbemont
> <pdherbemont at free.fr> wrote:
>>> If a thread calls vlc_object_release() to destroy itself, there is  
>>> an
>>> obvious deadlock, and vlc_thread_join() fails loudly.
>>
>> pthread_join() should not dead lock and return EDEADLK. On Windows, I
>> don't know.
>
> Wrong.
>
> EDEADLK is a MAY fail error, not a SHALL fail error. There is no  
> obligation
> for pthread implementations to handle this properly.

Can we agree that sane pthread implementation do that? (like  
vlc_assert_locked() and such).

> Besides, calling
> pthread_join() multiple times against the same thread is explicitly
> undefined.

Where would we do that? (vlc_thread_join set b_thread to false).

I could agree to revert but I think we have to find a better solution.  
The threaded vlc_object_t refcounting depends on that. (Else you end  
up with mem corruption in vlc_object_destroy(), if a thread is running).

The other solution would be to simply have a buffer function between  
the pthread_create() and the object's run loop that make sure we can  
effectively tell if the run loop has been properly killed.

What do you think?

Pierre.



More information about the vlc-devel mailing list