\lib\dtrans\source\win32\dnd\target.cxx

void SAL_CALL DropTarget::initialize( const Sequence< Any >& aArguments )
        throw(Exception, RuntimeException)
{

...........
            m_hOleThread= CreateThread( NULL, 0,
(LPTHREAD_START_ROUTINE)DndTargetOleSTAFunc,
                                            &m_evtThreadReady, 0,
&m_threadIdTarget);
            WaitForSingleObject( m_evtThreadReady, INFINITE);

...........
}


DWORD WINAPI DndTargetOleSTAFunc(LPVOID pParams)
{
    HRESULT hr= OleInitialize( NULL);
    if( SUCCEEDED( hr) )
    {
        MSG msg;
        // force the creation of a message queue
        PeekMessage( &msg, (HWND)NULL, 0, 0, PM_NOREMOVE);
        // Signal the creator ( DropTarget::initialize) that the thread is
        // ready to receive messages.
        SetEvent( *(HANDLE*) pParams);
...........
    }
   // no SetEvent( *(HANDLE*) pParams); action this branch.
}



If OleInitialize() inside DndTargetOleSTAFunc failed, DropTarget::initialize
will wait the m_evtThreadReady event forever. Could this cause freezing
problem?

Reply via email to