<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>
I downloaded x264 git a couple of days ago and I tried to use it on windows. It was always crashing if I used win-threads and backtrace was corrupted, I wasn't even able to see what caused it. Apparently, it crashed when calling some win-api.<br>Today I pulled the new fix (by Anton Mitrofanov, Commit:5c85e0a2b7992fcaab09418e3fcefc613cffc743) and the problem is gone.<br><br>When I tried to look into it, I saw some strange code:<br><br><font style="" face="Courier New">int x264_pthread_mutex_lock( x264_pthread_mutex_t *mutex )</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">{</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">    static x264_pthread_mutex_t init = X264_PTHREAD_MUTEX_INITIALIZER;</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">    if( !memcmp( mutex, &init, sizeof(x264_pthread_mutex_t) ) )</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">        *mutex = thread_control.static_mutex;</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">    EnterCriticalSection( mutex );</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">    return 0;</font><font style="" face="Courier New"><br></font><font style="" face="Courier New">}</font><font style="" face="Courier New"><br></font><br>As I understand, if some mutex wasn't initialized, it will be overwritten with the <font style="" face="Courier New">thread_control.static_mutex</font>. How is that might make sense? Does that match regular pthread behavior? Is that sure that windows' CRITICAL_SECTION can be reused in that way? Internally it contains some opaque pointers/handlers CRITICAL_SECTION.hCrit or handlers to semaphores etc. It all depends on the OS version. In any case, the bible says that "A critical section object cannot be moved or copied": http://msdn.microsoft.com/en-us/library/ms683472%28v=VS.85%29.aspx . Which is enough to consider that win32thread.c/<font style="" face="Courier New">x264_pthread_mutex_lock is bad.<br><br><font style="" face="Arial">PS. no idea if that clobbering of mutex was related to that, but I had that impression that it was related to that code.<br><br></font></font><br>                                    </div></body>
</html>