if(bCanEnter)   { bCanEnter = FALSE;  if(TimerImpl::gTimerList)    { TimerImpl::ProcessTimeouts(aTime); } bCanEnter = TRUE;
if (timer->GetType() != NS_TYPE_REPEATING_PRECISE) {  timer->KillOSTimer(); }  nsCOMPtr<nsITimerQueue> queue = do_QueryInterface(manager, &rv); if (NS_FAILED(rv)) return;  if (timer->GetPriority() >= NS_PRIORITY_IMMEDIATE) {  timer->Fire();  } else {  queue->AddReadyQueue(timer); }   MSG wmsg; while (queue->HasReadyTimers(NS_PRIORITY_LOWEST) && !::PeekMessage(&wmsg, NULL, 0, 0, PM_NOREMOVE)) { queue->FireNextReadyTimer(NS_PRIORITY_LOWEST);
void CALLBACK FireTimeout(HWND aWindow,                           UINT aMessage,                           UINT aTimerID,                           DWORD aTime){  static BOOL bCanEnter = TRUE;  //  Don't allow old timer messages in here.  if(aMessage != WM_TIMER)    {    PR_ASSERT(0);    return;  }  if(aTimerID != TimerImpl::gWindowsTimer)   {    return;  }    //  Block only one entry into this function, or else.  if(bCanEnter)   {    bCanEnter = FALSE;    // see if we need to fork off any timeout functions    if(TimerImpl::gTimerList)    {      TimerImpl::ProcessTimeouts(aTime);    }    bCanEnter = TRUE;  }}