<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-CA link=blue vlink=purple><div class=WordSection1><p class=MsoNormal>First, the feature is built so no related functionality will be running if there is no MED file. <o:p></o:p></p><p class=MsoNormal>If the MED file exists, and the user selects layers to play, the code in mainLoop makes an appropriate jump, and will only search for another jump location when the item time is out of the bounds of the currently playing event.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Second, I'll note a change to the input thread behavior.<o:p></o:p></p><p class=MsoNormal>Previously, there was a race condition between the input thread and the InputManager thread. It was possible for the input thread to start the initialization, when the InputManager thread has not set its callback yet, which lead to input events being missed. <o:p></o:p></p><p class=MsoNormal>(some code from preparser.c: <o:p></o:p></p><p class=MsoNormal><b>input_Preparse( obj, p_item );<o:p></o:p></b></p><p class=MsoNormal>*this starts the input initialization and event transmissions*<o:p></o:p></p><p class=MsoNormal>and then <o:p></o:p></p><p class=MsoNormal><b>var_SetAddress( obj, "item-change", p_item );<o:p></o:p></b></p><p class=MsoNormal>This will get the InputManager to *at some point* call setInput and add a callback)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This was not a problem previously because events would repeat and be picked up when the InputManager has actually set the callback. <o:p></o:p></p><p class=MsoNormal>But in my case I have two events that do not repeat, so I needed to fix this behavior. I added a mutex and I also changed the behavior of the inputManager to only delete its callback when a setInput event was called with a different input than the existing one. <o:p></o:p></p><p class=MsoNormal>This guarantees the synchronization of the threads and prevents any kind of missed events.<o:p></o:p></p></div></body></html>