Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c8a57558 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "add killProcessGroupOnce"

parents 273a0624 fac4b63e
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -24,6 +24,8 @@ __BEGIN_DECLS


int killProcessGroup(uid_t uid, int initialPid, int signal);
int killProcessGroup(uid_t uid, int initialPid, int signal);


int killProcessGroupOnce(uid_t uid, int initialPid, int signal);

int createProcessGroup(uid_t uid, int initialPid);
int createProcessGroup(uid_t uid, int initialPid);


void removeAllProcessGroups(void);
void removeAllProcessGroups(void);
+11 −6
Original line number Original line Diff line number Diff line
@@ -252,8 +252,7 @@ void removeAllProcessGroups()
    }
    }
}
}


static int killProcessGroupOnce(uid_t uid, int initialPid, int signal)
static int doKillProcessGroupOnce(uid_t uid, int initialPid, int signal) {
{
    int processes = 0;
    int processes = 0;
    struct ctx ctx;
    struct ctx ctx;
    pid_t pid;
    pid_t pid;
@@ -282,13 +281,11 @@ static int killProcessGroupOnce(uid_t uid, int initialPid, int signal)
    return processes;
    return processes;
}
}


int killProcessGroup(uid_t uid, int initialPid, int signal)
static int killProcessGroup(uid_t uid, int initialPid, int signal, int retry) {
{
    std::chrono::steady_clock::time_point start = std::chrono::steady_clock::now();
    std::chrono::steady_clock::time_point start = std::chrono::steady_clock::now();


    int retry = 40;
    int processes;
    int processes;
    while ((processes = killProcessGroupOnce(uid, initialPid, signal)) > 0) {
    while ((processes = doKillProcessGroupOnce(uid, initialPid, signal)) > 0) {
        LOG(VERBOSE) << "killed " << processes << " processes for processgroup " << initialPid;
        LOG(VERBOSE) << "killed " << processes << " processes for processgroup " << initialPid;
        if (retry > 0) {
        if (retry > 0) {
            std::this_thread::sleep_for(5ms);
            std::this_thread::sleep_for(5ms);
@@ -313,6 +310,14 @@ int killProcessGroup(uid_t uid, int initialPid, int signal)
    }
    }
}
}


int killProcessGroup(uid_t uid, int initialPid, int signal) {
    return killProcessGroup(uid, initialPid, signal, 40 /*maxRetry*/);
}

int killProcessGroupOnce(uid_t uid, int initialPid, int signal) {
    return killProcessGroup(uid, initialPid, signal, 0 /*maxRetry*/);
}

static bool mkdirAndChown(const char *path, mode_t mode, uid_t uid, gid_t gid)
static bool mkdirAndChown(const char *path, mode_t mode, uid_t uid, gid_t gid)
{
{
    if (mkdir(path, mode) == -1 && errno != EEXIST) {
    if (mkdir(path, mode) == -1 && errno != EEXIST) {