Then something else must be going on. This is Windows XP/7 and not WINE, right?

Sent from my iPhone

On Jul 1, 2011, at 2:19 AM, Benjamin Thaut <c...@benjamin-thaut.de> wrote:

> Am 01.07.2011 03:51, schrieb Sean Kelly:
>> This is the only one I can think of, and it was added based on a suggestion 
>> following a report of a similar bug elsewhere. It sounds like in some weird 
>> circumstances, SuspendThread may return before the thread is suspended. 
>> There's no way to determine this and I'd call it a kernel bug if true, and 
>> the only real option is to spin on GetThreadContext for a bit before giving 
>> up and halting the app.
>> 
>> Sent from my iPhone
>> 
>> On Jun 30, 2011, at 4:31 PM, "Eric Poggel 
>> (JoeCoder)"<dnewsgro...@yage3d.net>  wrote:
>> 
>>> On 6/30/2011 3:05 PM, Sean Kelly wrote:
>>>> On Jun 30, 2011, at 2:40 AM, Benjamin Thaut wrote:
>>>> 
>>>>> Am 30.06.2011 06:45, schrieb Sean Kelly:
>>>>>> On Jun 29, 2011, at 10:00 AM, Benjamin Thaut wrote:
>>>>>>> If I manually merge your fix into the thread.d of the 2.053 runtime 
>>>>>>> (change m to __gshared in slock) the issue still exsits. After a while 
>>>>>>> the game will stop with "unable to load thread context".
>>>>>> 
>>>>>> Just for kicks, rewrite the GetThreadContext call as this and see if it 
>>>>>> works in 2.053:
>>>>>> 
>>>>>>             for( int i = 0; !GetThreadContext( t.m_hndl,&context ); i++ )
>>>>>>             {
>>>>>>                 if( i>    99 )
>>>>>>                     throw new ThreadException( "Unable to load thread 
>>>>>> context" );
>>>>>>                 Thread.yield();
>>>>>>             }
>>>>>> 
>>>>> 
>>>>> The for loop seems to have fixed the issue, at least I'm not able to 
>>>>> reproduce it easily any more. I'm going to be able to tell you tomorrow 
>>>>> if the issue is fixed completely or not.
>>>> 
>>>> Cool.  I've applied the change to druntime.
>>>> 
>>>>> Does any access to the GC cause a Exception to be thrown? I mean even a 
>>>>> removeRange call?
>>>> 
>>>> malloc, realloc, extend, reserve, addRoot, and addRange.  I think that's 
>>>> it.
>>> 
>>> This makes me wonder how many other such hacks like this are in DRuntime.  
>>> If this problem happens once every 30 minutes, then I suppose this 
>>> decreases it to once every 30^100 minutes (which is older than the 
>>> universe).
> 
> The loop unfortunately didn't fix the problem. It just became less frequent. 
> I even tried adding additional Sleep time to the loop without success.
> 
> -- 
> Kind Regards
> Benjamin Thaut

Reply via email to