void IOFWAsyncStreamReceiver::free()
{
	fControl->closeGate();

#ifdef DCL_MODE

	deactivate();

	// free dcl program
	if( fdclProgram )
	{
		FreeAsyncStreamRxDCLProgram(fdclProgram);
		fdclProgram = NULL;
	}

	// free the buffer 
	if( fBufDesc ) 
	{
		fBufDesc->release();
		fBufDesc = NULL;
	}

#else

	if( fListener )
	{
		fListener->Deactivate();
		fListener->release();
		fListener = NULL;
	}
	
	// free the buffer 
	if( fBufDesc ) 
	{
		fBufDesc->release();
		fBufDesc = NULL;
	}
	
#endif
	
	removeAllListeners();

	if ( fAsyncStreamClients )
	{
		fAsyncStreamClients->release();
		fAsyncStreamClients = NULL;
	}
	
	if( fAsyncStreamClientIterator )
	{
		fAsyncStreamClientIterator->release();
		fAsyncStreamClientIterator = NULL;
	}

	fControl->openGate();

	OSObject::free();
}
void DeviceOrientationController::suspendEventsForAllListeners(DOMWindow* window)
{
    if (!m_listeners.contains(window))
        return;

    int count = m_listeners.count(window);
    removeAllListeners(window);
    while (count--)
        m_suspendedListeners.add(window);
}
Ejemplo n.º 3
0
Object::~Object()
{
  ObjectExtra* extra = _objectExtra;

  if (extra != &Object_extraNull)
  {
    // Delete all children.
    err_t err = _removeAll();

    if (FOG_IS_ERROR(err))
    {
      Logger::error("Fog::Object", "~Object",
        "_removeAll() failed, error=%u.", err);
    }

    // Delete all connections.
    if (!extra->_forwardConnection.isEmpty())
    {
      removeAllListeners();
    }

    _objectExtra = &Object_extraNull;
    ObjectExtra_destroy(extra);
  }

  // Delete all posted events.
  if (_events)
  {
    AutoLock locked(Object::_internalLock);

    // Set "wasDeleted" for all pending events.
    Event* ev = _events;

    while (ev)
    {
      // Event will be deleted by an event loop, we need only to mark it for
      // deletion so it won't be processed (called).
      ev->_wasDeleted = 1;

      // Go to previous, because newest pending events are stored first.
      ev = ev->_prev;
    }
  }
}