mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-24 05:11:16 +00:00
0ae24ebfa4
Before this patch, when the profile is locked on Android, we would call "ps", parse the human-readable output and kill any other Gecko process that we could find. But this is completely unnecessary, as we know exactly that the PID of the process holding the lock is. In this patch we just kill the process holding the lock since this is equivalent to the previous behavior. Differential Revision: https://phabricator.services.mozilla.com/D106186
38 lines
1.0 KiB
C++
38 lines
1.0 KiB
C++
/* 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 "ProfileUnlockerAndroid.h"
|
|
#include "nsPrintfCString.h"
|
|
#include <unistd.h>
|
|
|
|
namespace mozilla {
|
|
|
|
ProfileUnlockerAndroid::ProfileUnlockerAndroid(const pid_t aPid) : mPid(aPid) {}
|
|
|
|
ProfileUnlockerAndroid::~ProfileUnlockerAndroid() {}
|
|
|
|
NS_IMPL_ISUPPORTS(ProfileUnlockerAndroid, nsIProfileUnlocker)
|
|
|
|
NS_IMETHODIMP
|
|
ProfileUnlockerAndroid::Unlock(uint32_t aSeverity) {
|
|
if (aSeverity != FORCE_QUIT) {
|
|
return NS_ERROR_NOT_IMPLEMENTED;
|
|
}
|
|
|
|
NS_WARNING(nsPrintfCString("Process %d has the profile "
|
|
"lock, will try to kill it.",
|
|
mPid)
|
|
.get());
|
|
if (mPid == getpid()) {
|
|
NS_ERROR("Lock held by current process !?");
|
|
return NS_ERROR_FAILURE;
|
|
}
|
|
if (kill(mPid, SIGKILL) != 0) {
|
|
NS_WARNING("Could not kill process.");
|
|
}
|
|
return NS_OK;
|
|
}
|
|
|
|
} // namespace mozilla
|