コード例 #1
0
IToplevelProtocol::~IToplevelProtocol()
{
  bool last = false;

  {
    MutexAutoLock al(*gProtocolMutex);

    for (IToplevelProtocol* actor = mOpenActors.getFirst();
         actor;
         actor = actor->getNext()) {
      actor->mOpener = nullptr;
    }

    mOpenActors.clear();

    if (mOpener) {
      removeFrom(mOpener->mOpenActors);
    }

    gNumProtocols--;
    last = gNumProtocols == 0;
  }

  if (last) {
    gProtocolMutex = nullptr;
  }
}
コード例 #2
0
ファイル: NuwaChild.cpp プロジェクト: Jar-win/Waterfox
NS_EXPORT void
GetProtoFdInfos(NuwaProtoFdInfo* aInfoList,
                size_t aInfoListSize,
                size_t* aInfoSize)
{
  size_t i = 0;

  mozilla::dom::ContentChild* content =
    mozilla::dom::ContentChild::GetSingleton();
  aInfoList[i].protoId = content->GetProtocolId();
  aInfoList[i].originFd =
    content->GetTransport()->GetFileDescriptor();
  i++;

  IToplevelProtocol* actors[NUWA_TOPLEVEL_MAX];
  size_t count = content->GetOpenedActorsUnsafe(actors, ArrayLength(actors));
  for (size_t j = 0; j < count; j++) {
    IToplevelProtocol* actor = actors[j];
    if (i >= aInfoListSize) {
      NS_RUNTIMEABORT("Too many top level protocols!");
    }

    aInfoList[i].protoId = actor->GetProtocolId();
    aInfoList[i].originFd =
      actor->GetTransport()->GetFileDescriptor();
    i++;
  }

  if (i > NUWA_TOPLEVEL_MAX) {
    NS_RUNTIMEABORT("Too many top level protocols!");
  }
  *aInfoSize = i;
}
コード例 #3
0
ファイル: ProtocolUtils.cpp プロジェクト: hobinjk/gecko-dev
void
IToplevelProtocol::GetOpenedActorsLocked(nsTArray<IToplevelProtocol*>& aActors)
{
  gProtocolMutex.AssertCurrentThreadOwns();

  for (IToplevelProtocol* actor = mOpenActors.getFirst();
       actor;
       actor = actor->getNext()) {
    aActors.AppendElement(actor);
  }
}
コード例 #4
0
ファイル: ProtocolUtils.cpp プロジェクト: hobinjk/gecko-dev
size_t
IToplevelProtocol::GetOpenedActorsUnsafe(IToplevelProtocol** aActors, size_t aActorsMax)
{
  size_t count = 0;
  for (IToplevelProtocol* actor = mOpenActors.getFirst();
       actor;
       actor = actor->getNext()) {
    MOZ_RELEASE_ASSERT(count < aActorsMax);
    aActors[count++] = actor;
  }
  return count;
}
コード例 #5
0
ファイル: ProtocolUtils.cpp プロジェクト: Andrel322/gecko-dev
void
IToplevelProtocol::CloneOpenedToplevels(IToplevelProtocol* aTemplate,
                                        const InfallibleTArray<ProtocolFdMapping>& aFds,
                                        base::ProcessHandle aPeerProcess,
                                        ProtocolCloneContext* aCtx)
{
  for (IToplevelProtocol* actor = aTemplate->GetFirstOpenedActors();
       actor;
       actor = actor->getNext()) {
    IToplevelProtocol* newactor = actor->CloneToplevel(aFds, aPeerProcess, aCtx);
    AddOpenedActor(newactor);
  }
}
コード例 #6
0
ファイル: ProtocolUtils.cpp プロジェクト: hobinjk/gecko-dev
IToplevelProtocol::~IToplevelProtocol()
{
  StaticMutexAutoLock al(gProtocolMutex);

  for (IToplevelProtocol* actor = mOpenActors.getFirst();
       actor;
       actor = actor->getNext()) {
    actor->mOpener = nullptr;
  }

  mOpenActors.clear();

  if (mOpener) {
      removeFrom(mOpener->mOpenActors);
  }
}