Changeset 202 for Include


Ignore:
Timestamp:
Apr 4, 2007, 5:21:21 PM (18 years ago)
Author:
イグトランス (egtra)
Message:

sweep処理中にsweepが呼ばれてしまうことがあるらしく、デッドロックが起こることがあったのをisSweepingの活用によって修正。ついでにダブルチェックドロック化。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Include/system/gc.sbp

    r171 r202  
    198198
    199199    Sub sweep()
    200         If iAllSize<limitMemorySize Then
     200        If isSweeping <> False Or iAllSize<limitMemorySize Then
    201201            'メモリ使用量が上限値を超えていないとき
    202202            Exit Sub
    203203        End If
    204 
     204        isSweeping = True
    205205        OutputDebugString( Ex"garbage colletion sweep start!\r\n" )
    206206
     
    210210        WaitForSingleObject(hThread,INFINITE)
    211211        CloseHandle(hThread)
     212        isSweeping = False
    212213    End Sub
    213214
     
    347348        EnterCriticalSection(CriticalSection)
    348349
     350        If isSweeping <> False Or iAllSize<limitMemorySize Then
     351            ExitThread(0)
     352        End If
     353
    349354        ' すべてのスレッドを一時停止
    350355        _System_pobj_AllThreads->SuspendAllThread()
Note: See TracChangeset for help on using the changeset viewer.