// Factory function, may return NULL if entry is invalid. static wxTextAutoCompleteFixed* New(wxTextEntry *entry) { if ( !CanComplete(entry) ) return NULL; return new wxTextAutoCompleteFixed(entry); }
void OverlappedCall::OnActivateProcess() { HARDASSERT(::GetCurrentThreadId() == Interpreter::MainThreadId()); // Probably need 3 states - nothing pending, request pending, completion pending if (m_bCompletionRequestPending && CanComplete()) { m_bCompletionRequestPending = false; if (m_bCallPrimitiveFailed) { m_bCallPrimitiveFailed = false; ASSERT(m_interpContext.m_stackPointer == Interpreter::m_registers.m_stackPointer); ASSERT(m_interpContext.m_basePointer == Interpreter::m_registers.m_basePointer); Interpreter::m_registers.m_oopNewMethod = m_interpContext.m_oopNewMethod; Interpreter::activateNewMethod(m_interpContext.m_oopNewMethod->m_location); } // Let the overlapped thread continue ::SetEvent(m_hEvtGo); // And wait for it to finish (non-alertable since we don't want other completions to interfere) DWORD dwRet = ::WaitForSingleObject(m_hEvtCompleted, INFINITE); if (dwRet != WAIT_OBJECT_0) trace(L"%#x: OverlappedCall(%#x) completion wait terminated abnormally with %#x\n", GetCurrentThreadId(), this, dwRet); } }