Bug 1142935 - reset transports with NuwaAddConstructor(). r=tlee

This commit is contained in:
Cervantes Yu 2015-03-16 22:25:59 -07:00
Родитель d24913bfc3
Коммит 45006fc32b
1 изменённых файлов: 25 добавлений и 12 удалений

Просмотреть файл

@ -549,6 +549,25 @@ InitOnContentProcessCreated()
mozilla::dom::time::InitializeDateCacheCleaner();
}
#ifdef MOZ_NUWA_PROCESS
static void
ResetTransports(void* aUnused) {
ContentChild* child = ContentChild::GetSingleton();
mozilla::ipc::Transport* transport = child->GetTransport();
int fd = transport->GetFileDescriptor();
transport->ResetFileDescriptor(fd);
IToplevelProtocol* toplevel = child->GetFirstOpenedActors();
while (toplevel != nullptr) {
transport = toplevel->GetTransport();
fd = transport->GetFileDescriptor();
transport->ResetFileDescriptor(fd);
toplevel = toplevel->getNext();
}
}
#endif
#if defined(MOZ_TASK_TRACER) && defined(MOZ_NUWA_PROCESS)
static void
ReinitTaskTracer(void* /*aUnused*/)
@ -654,6 +673,12 @@ ContentChild::Init(MessageLoop* aIOLoop,
}
#endif
#ifdef MOZ_NUWA_PROCESS
if (IsNuwaProcess()) {
NuwaAddConstructor(ResetTransports, nullptr);
}
#endif
return true;
}
@ -2415,18 +2440,6 @@ public:
// In the new process.
ContentChild* child = ContentChild::GetSingleton();
child->SetProcessName(NS_LITERAL_STRING("(Preallocated app)"), false);
mozilla::ipc::Transport* transport = child->GetTransport();
int fd = transport->GetFileDescriptor();
transport->ResetFileDescriptor(fd);
IToplevelProtocol* toplevel = child->GetFirstOpenedActors();
while (toplevel != nullptr) {
transport = toplevel->GetTransport();
fd = transport->GetFileDescriptor();
transport->ResetFileDescriptor(fd);
toplevel = toplevel->getNext();
}
// Perform other after-fork initializations.
InitOnContentProcessCreated();