Changeset 330


Ignore:
Timestamp:
Sep 9, 2007, 12:41:35 PM (17 years ago)
Author:
dai
Message:

コンストラクタパラメータを処理中にGCがかかると、初期化中オブジェクトのスキャンで強制終了してしまうバグを修正。
グローバル領域に保持されるオブジェクトの一部がGCによって不正に回収されてしまうバグを修正。
Thread.Nameプロパティを実装

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Include/Classes/System/IO/DirectoryInfo.ab

    r327 r330  
    165165
    166166        Dim files As List<FileSystemInfo>
    167         Dim i As Long
     167        Dim i = 0 As Long
    168168        Do
    169169            If i > 1 Then
  • trunk/Include/Classes/System/Threading/Thread.ab

    r303 r330  
    2626    m_fp As PTHREAD_START_ROUTINE
    2727    m_args As VoidPtr
     28    name As String
    2829
    2930Public
     
    3435
    3536        m_fp=0
     37
     38        name = "sub thread"
    3639    End Sub
    3740    Sub Thread(fp As PTHREAD_START_ROUTINE, args As VoidPtr)
     
    4245        m_fp=fp
    4346        m_args=args
     47
     48        name = "sub thread"
    4449    End Sub
    4550
     
    5055        m_fp=obj.m_fp
    5156        m_args=obj.m_args
     57
     58        name = "sub thread"
    5259    End Sub
    5360
     
    5562        m_hThread=hThread
    5663        m_dwThreadId=dwThreadId
     64
     65        name = "sub thread"
    5766    End Sub
    5867
     
    8392        Return m_dwThreadId
    8493    End Function
     94
     95    Function Name() As String
     96        Return name
     97    End Function
     98    Sub Name( name As String )
     99        This.name = name
     100    End Sub
    85101
    86102
  • trunk/Include/system/gc.sbp

    r299 r330  
    126126        ' 自身のThreadオブジェクトを生成
    127127        Dim thread As Thread(hTargetThread,GetCurrentThreadId(),0)
     128        thread.Name = "main"
    128129
    129130        _System_pobj_AllThreads->BeginThread(ObjPtr( thread ),_System_gc_StackRoot_StartPtr As *LONG_PTR)
     
    179180            pdwFlags[n]=flags
    180181        LeaveCriticalSection(CriticalSection)
     182
     183        /*
     184        ' デバッグ用
     185        If n = 1996 Then
     186            debug
     187        End If
     188        */
    181189
    182190        n++
     
    283291        End If
    284292
     293        /*
     294        _System_DebugOnly_OutputDebugString( "  (scanning object)" )
     295        _System_DebugOnly_OutputDebugString( classTypeInfo.Name )
     296        _System_DebugOnly_OutputDebugString( Ex"\r\n" )
     297        */
     298
    285299        Dim i As Long
    286300        For i = 0 To ELM(classTypeInfo.numOfReference)
     
    330344        Dim i As Long
    331345        For i=0 To ELM(_System_pobj_AllThreads->ThreadNum)
    332             If _System_pobj_AllThreads->ppobj_Thread[i] Then
     346            Dim thread = _System_pobj_AllThreads->ppobj_Thread[i]
     347            If thread Then
    333348                FillMemory(VarPtr(Context),SizeOf(CONTEXT),0)
    334349                Context.ContextFlags=CONTEXT_CONTROL
    335                 If _System_pobj_AllThreads->ppobj_Thread[i]->__GetContext(Context)=0 Then
     350                If thread->__GetContext(Context)=0 Then
    336351                    _System_DebugOnly_OutputDebugString(Ex"レジスタ情報の取得に失敗しました。\r\n")
    337352                End If
     
    350365                    Exit Sub
    351366                End If
     367
     368                /*
     369                _System_DebugOnly_OutputDebugString( "(scanning thread local)" )
     370                _System_DebugOnly_OutputDebugString( thread.Name )
     371                _System_DebugOnly_OutputDebugString( Ex"\r\n" )
     372                */
    352373
    353374                Scan( NowSp, maxNum, pbMark )
Note: See TracChangeset for help on using the changeset viewer.