зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1851095 - Step 2: Connect setproctitle to the fork server. r=nika
This adds a small function that concatenates the args (because not only does the BSD `setproctitle` take a single string, but also the Linux kernel code that implements `/proc/{pid}/cmdline` won't allow the "arguments" to extend past their original length unless it's a single string), and connects it to the fork server. Differential Revision: https://phabricator.services.mozilla.com/D187635
This commit is contained in:
Родитель
c48e55cb24
Коммит
df9fa90f41
|
@ -27,6 +27,7 @@
|
|||
# include "mozilla/Unused.h"
|
||||
# include "mozilla/ScopeExit.h"
|
||||
# include "mozilla/ipc/ProcessUtils.h"
|
||||
# include "mozilla/ipc/SetProcessTitle.h"
|
||||
|
||||
using namespace mozilla::ipc;
|
||||
#endif
|
||||
|
@ -142,6 +143,7 @@ void AppProcessBuilder::ReplaceArguments(int* argcp, char*** argvp) {
|
|||
*p = nullptr;
|
||||
*argvp = argv;
|
||||
*argcp = argv_.size();
|
||||
mozilla::SetProcessTitle(argv_);
|
||||
}
|
||||
|
||||
void AppProcessBuilder::InitAppProcess(int* argcp, char*** argvp) {
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include "mozilla/ipc/FileDescriptor.h"
|
||||
#include "mozilla/ipc/IPDLParamTraits.h"
|
||||
#include "mozilla/ipc/ProtocolMessageUtils.h"
|
||||
#include "mozilla/ipc/SetProcessTitle.h"
|
||||
#include "nsTraceRefcnt.h"
|
||||
|
||||
#include <fcntl.h>
|
||||
|
@ -256,6 +257,8 @@ bool ForkServer::RunForkServer(int* aArgc, char*** aArgv) {
|
|||
bool sleep_newproc = !!getenv("MOZ_FORKSERVER_WAIT_GDB_NEWPROC");
|
||||
#endif
|
||||
|
||||
SetProcessTitleInit(*aArgv);
|
||||
|
||||
// Do this before NS_LogInit() to avoid log files taking lower
|
||||
// FDs.
|
||||
ForkServer forkserver;
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "mozilla/ipc/SetProcessTitle.h"
|
||||
|
||||
#include "nsString.h"
|
||||
|
||||
#ifdef XP_LINUX
|
||||
|
||||
# include "base/set_process_title_linux.h"
|
||||
# define HAVE_SETPROCTITLE
|
||||
# define HAVE_SETPROCTITLE_INIT
|
||||
|
||||
#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || \
|
||||
defined(__DragonFly__)
|
||||
|
||||
# include <sys/types.h>
|
||||
# include <unistd.h>
|
||||
# define HAVE_SETPROCTITLE
|
||||
|
||||
#endif
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
void SetProcessTitle(const std::vector<std::string>& aNewArgv) {
|
||||
#ifdef HAVE_SETPROCTITLE
|
||||
nsAutoCStringN<1024> buf;
|
||||
|
||||
bool firstArg = true;
|
||||
for (const std::string& arg : aNewArgv) {
|
||||
if (firstArg) {
|
||||
firstArg = false;
|
||||
} else {
|
||||
buf.Append(' ');
|
||||
}
|
||||
buf.Append(arg.c_str());
|
||||
}
|
||||
|
||||
setproctitle("-%s", buf.get());
|
||||
#endif
|
||||
}
|
||||
|
||||
void SetProcessTitleInit(char** aOrigArgv) {
|
||||
#ifdef HAVE_SETPROCTITLE_INIT
|
||||
setproctitle_init(aOrigArgv);
|
||||
#endif
|
||||
}
|
||||
|
||||
} // namespace mozilla
|
|
@ -0,0 +1,19 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#ifndef mozilla_ipc_SetProcessTitle_h
|
||||
#define mozilla_ipc_SetProcessTitle_h
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
void SetProcessTitle(const std::vector<std::string>& aNewArgv);
|
||||
void SetProcessTitleInit(char** aOrigArgv);
|
||||
|
||||
} // namespace mozilla
|
||||
|
||||
#endif // mozilla_ipc_SetProcessTitle_h
|
|
@ -125,9 +125,19 @@ else:
|
|||
if CONFIG["OS_ARCH"] == "Linux":
|
||||
UNIFIED_SOURCES += [
|
||||
"ProcessUtils_linux.cpp",
|
||||
"SetProcessTitle.cpp",
|
||||
]
|
||||
EXPORTS.mozilla.ipc += [
|
||||
"SetProcessTitle.h",
|
||||
]
|
||||
elif CONFIG["OS_ARCH"] in ("DragonFly", "FreeBSD", "NetBSD", "OpenBSD"):
|
||||
UNIFIED_SOURCES += ["ProcessUtils_bsd.cpp"]
|
||||
UNIFIED_SOURCES += [
|
||||
"ProcessUtils_bsd.cpp",
|
||||
"SetProcessTitle.cpp",
|
||||
]
|
||||
EXPORTS.ipc += [
|
||||
"SetProcessTitle.h",
|
||||
]
|
||||
elif CONFIG["OS_ARCH"] == "Darwin":
|
||||
UNIFIED_SOURCES += ["ProcessUtils_mac.mm"]
|
||||
else:
|
||||
|
|
Загрузка…
Ссылка в новой задаче