mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-08 08:26:10 +00:00
igt_core: Refactor igt_stop_helper() to use igt_wait_helper()
Reduce code duplication as the igt_stop_helper can reuse igt_wait_helper() to replace its own waiting routine. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
bd3cf81e98
commit
745945546f
@ -842,6 +842,29 @@ bool __igt_fork_helper(struct igt_helper_process *proc)
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* igt_wait_helper:
|
||||
* @proc: #igt_helper_process structure
|
||||
*
|
||||
* Joins a helper process. It is an error to call this on a helper process which
|
||||
* hasn't been spawned yet.
|
||||
*/
|
||||
int igt_wait_helper(struct igt_helper_process *proc)
|
||||
{
|
||||
int status = -1;
|
||||
|
||||
assert(proc->running);
|
||||
|
||||
waitpid(proc->pid, &status, WNOHANG);
|
||||
|
||||
proc->running = false;
|
||||
|
||||
helper_process_pids[proc->id] = -1;
|
||||
helper_process_count--;
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* igt_stop_helper:
|
||||
* @proc: #igt_helper_process structure
|
||||
@ -850,49 +873,15 @@ bool __igt_fork_helper(struct igt_helper_process *proc)
|
||||
* which hasn't been spawned yet.
|
||||
*/
|
||||
void igt_stop_helper(struct igt_helper_process *proc)
|
||||
{
|
||||
int status, ret;
|
||||
|
||||
assert(proc->running);
|
||||
|
||||
ret = kill(proc->pid,
|
||||
proc->use_SIGKILL ? SIGKILL : SIGTERM);
|
||||
assert(ret == 0);
|
||||
|
||||
while (waitpid(proc->pid, &status, 0) == -1 &&
|
||||
errno == EINTR)
|
||||
;
|
||||
igt_assert(WIFSIGNALED(status) &&
|
||||
WTERMSIG(status) == (proc->use_SIGKILL ? SIGKILL : SIGTERM));
|
||||
|
||||
proc->running = false;
|
||||
|
||||
helper_process_pids[proc->id] = -1;
|
||||
helper_process_count--;
|
||||
}
|
||||
|
||||
/**
|
||||
* igt_wait_helper:
|
||||
* @proc: #igt_helper_process structure
|
||||
*
|
||||
* Joins a helper process. It is an error to call this on a helper process which
|
||||
* hasn't been spawned yet.
|
||||
*/
|
||||
void igt_wait_helper(struct igt_helper_process *proc)
|
||||
{
|
||||
int status;
|
||||
|
||||
assert(proc->running);
|
||||
/* failure here means the pid is already dead and so waiting is safe */
|
||||
kill(proc->pid, proc->use_SIGKILL ? SIGKILL : SIGTERM);
|
||||
|
||||
while (waitpid(proc->pid, &status, 0) == -1 &&
|
||||
errno == EINTR)
|
||||
;
|
||||
igt_assert(WIFEXITED(status) && WEXITSTATUS(status) == 0);
|
||||
|
||||
proc->running = false;
|
||||
|
||||
helper_process_pids[proc->id] = -1;
|
||||
helper_process_count--;
|
||||
status = igt_wait_helper(proc);
|
||||
assert(WIFSIGNALED(status) &&
|
||||
WTERMSIG(status) == (proc->use_SIGKILL ? SIGKILL : SIGTERM));
|
||||
}
|
||||
|
||||
static void children_exit_handler(int sig)
|
||||
|
@ -420,7 +420,7 @@ bool __igt_fork_helper(struct igt_helper_process *proc);
|
||||
*/
|
||||
#define igt_fork_helper(proc) \
|
||||
for (; __igt_fork_helper(proc); exit(0))
|
||||
void igt_wait_helper(struct igt_helper_process *proc);
|
||||
int igt_wait_helper(struct igt_helper_process *proc);
|
||||
void igt_stop_helper(struct igt_helper_process *proc);
|
||||
|
||||
/* exit handler code */
|
||||
|
@ -253,8 +253,12 @@ static void load_helper_run(enum load load)
|
||||
|
||||
static void load_helper_stop(void)
|
||||
{
|
||||
int status;
|
||||
|
||||
kill(lh.igt_proc.pid, SIGUSR1);
|
||||
igt_wait_helper(&lh.igt_proc);
|
||||
status = igt_wait_helper(&lh.igt_proc);
|
||||
|
||||
igt_assert(WIFSIGNALED(status) && WTERMSIG(status) == SIGUSR1);
|
||||
}
|
||||
|
||||
static void load_helper_init(void)
|
||||
|
Loading…
x
Reference in New Issue
Block a user