[FFmpeg-devel] Close Thread Handle in avcodec_thread_free

Shehzad Salim shehzadsalim
Wed Aug 12 14:31:40 CEST 2009


On Fri, Aug 7, 2009 at 4:31 PM, Shehzad Salim <shehzadsalim at gmail.com>wrote:

>
>
> On Fri, Aug 7, 2009 at 3:41 PM, Reimar D?ffinger <Reimar.Doeffinger at gmx.de
> > wrote:
>
>> On Fri, Aug 07, 2009 at 12:59:07PM +0100, Shehzad Salim wrote:
>> > But I have no idea to how to create a diff file or patch file on windows
>> OS.
>>
>> Have you ever tried TortoiseSVN? Not only can you easily get the latest
>> SVN of FFmpeg (which patches have to be against), you also can also
>> easily create diffs of the changes you made.
>> Also several IDEs (like eclipse) have at least optional plugins for SVN
>> support that can do that kind of thing, too.
>> Of course you can just use the commandline subversion client in exactly
>> the same way you do on Linux or so.
>
>
> Thanks a lot for telling about TortoiseSVN
>
>
>>
>> > Only one line is added in avcodec_thread_free function which is
>> > CloseHandle(c[i].thread);
>> >
>> > void avcodec_thread_free(AVCodecContext *s){
>> >     ThreadContext *c= s->thread_opaque;
>> >     int i;
>> >
>> >     for(i=0; i<s->thread_count; i++){
>> >
>> >         c[i].func= NULL;
>> >         ReleaseSemaphore(c[i].work_sem, 1, 0);
>> >         WaitForSingleObject(c[i].thread, INFINITE);
>> >         if(c[i].work_sem) CloseHandle(c[i].work_sem);
>> >         if(c[i].done_sem) CloseHandle(c[i].done_sem);
>> >         CloseHandle(c[i].thread);
>> >     }
>> >
>> >     av_freep(&s->thread_opaque);
>> > }
>>
>> Ok, I read it up. This is indeed correct since we use _beginthreadex.
>> It is also incomplete though, the thread function must call
>> _endthreadex, the return 0 is wrong and may leak memory, too (well,
>> actually the documentation contradicts itself here, it says that
>> _endthreadex will be called automatically anyway, but also says that
>> calling it will help reclaiming resources, the exact quote:
>> "You can call  _endthread or  _endthreadex explicitly to terminate a
>> thread; however, _endthread or _endthreadex is called automatically when
>> the thread returns from the routine passed as a parameter. Terminating a
>> thread with a call to endthread or _endthreadex helps to ensure proper
>> recovery of resources allocated for the thread.").
>
>
> I guess call to WaitForSingleObject is making sure that thread is finished,
> automatically either by _endthread or _endthreadex.
> But it's handle never get's closed. Call to CloseHandle makes sure that it
> is closed and now I don't have any more problems. Windows OS behaves very
> badly once process handle count goes above 7 or 8 thousand.
>
> Please find enclosed patch for w32thread.c
>
>

Is there anything else I need to do regarding this patch, so that it is
committed.
This patch surely does fix Thread Handle leak issue. It is not very big
patch as well.

Thanks

>
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel at mplayerhq.hu
>> https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel
>>
>
>
>
> --
> ?????? ????? ????? ???? ??????
>
> Best Regards
> Shehzad Salim
>



-- 
?????? ????? ????? ???? ??????

Best Regards
Shehzad Salim



More information about the ffmpeg-devel mailing list