Skip to content

Commit

Permalink
libcrun: let libcrun_container_kill* accept a string
Browse files Browse the repository at this point in the history
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
  • Loading branch information
giuseppe committed Dec 23, 2021
1 parent dd80179 commit 21a8daf
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 17 deletions.
4 changes: 2 additions & 2 deletions python/crun_python.c
Expand Up @@ -233,11 +233,11 @@ container_kill (PyObject *self, PyObject *args)
libcrun_error_t err;
PyObject *ctx_obj = NULL;
char *id = NULL;
int signal;
const char signal*;
libcrun_context_t *ctx;
int ret;

if (!PyArg_ParseTuple (args, "Osi", &ctx_obj, &id, &signal))
if (!PyArg_ParseTuple (args, "Oss", &ctx_obj, &id, &signal))
return NULL;

ctx = PyCapsule_GetPointer (ctx_obj, CONTEXT_OBJ_TAG);
Expand Down
11 changes: 4 additions & 7 deletions src/kill.c
Expand Up @@ -87,7 +87,8 @@ static struct argp run_argp = { options, parse_opt, args_doc, doc, NULL, NULL, N
int
crun_command_kill (struct crun_global_arguments *global_args, int argc, char **argv, libcrun_error_t *err)
{
int first_arg = 0, signal, ret;
int first_arg = 0, ret;
const char *signal;

libcrun_context_t crun_context = {
0,
Expand All @@ -100,13 +101,9 @@ crun_command_kill (struct crun_global_arguments *global_args, int argc, char **a
if (UNLIKELY (ret < 0))
return ret;

signal = SIGTERM;
signal = "SIGTERM";
if (argc - first_arg > 1)
{
signal = libcrun_str2sig (argv[first_arg + 1]);
if (UNLIKELY (signal < 0))
libcrun_fail_with_error (0, "unknown signal %s", argv[first_arg + 1]);
}
signal = argv[first_arg + 1];

if (kill_options.regex)
{
Expand Down
20 changes: 14 additions & 6 deletions src/libcrun/container.c
Expand Up @@ -1613,34 +1613,42 @@ libcrun_container_delete (libcrun_context_t *context, runtime_spec_schema_config
}

int
libcrun_container_kill (libcrun_context_t *context, const char *id, int signal, libcrun_error_t *err)
libcrun_container_kill (libcrun_context_t *context, const char *id, const char *signal, libcrun_error_t *err)
{
int ret;
int sig, ret;
const char *state_root = context->state_root;
cleanup_container_status libcrun_container_status_t status = {};

sig = libcrun_str2sig (signal);
if (UNLIKELY (sig < 0))
return crun_make_error (err, 0, "unknown signal %s", signal);

ret = libcrun_read_container_status (&status, state_root, id, err);
if (UNLIKELY (ret < 0))
return ret;

return libcrun_kill_linux (&status, signal, err);
return libcrun_kill_linux (&status, sig, err);
}

int
libcrun_container_kill_all (libcrun_context_t *context, const char *id, int signal, libcrun_error_t *err)
libcrun_container_kill_all (libcrun_context_t *context, const char *id, const char *signal, libcrun_error_t *err)
{
int ret;
int sig, ret;
const char *state_root = context->state_root;
cleanup_container_status libcrun_container_status_t status = {};
cleanup_cgroup_status struct libcrun_cgroup_status *cgroup_status = NULL;

sig = libcrun_str2sig (signal);
if (UNLIKELY (sig < 0))
return crun_make_error (err, 0, "unknown signal %s", signal);

ret = libcrun_read_container_status (&status, state_root, id, err);
if (UNLIKELY (ret < 0))
return ret;

cgroup_status = libcrun_cgroup_make_status (&status);

ret = libcrun_cgroup_killall (cgroup_status, signal, err);
ret = libcrun_cgroup_killall (cgroup_status, sig, err);
if (UNLIKELY (ret < 0))
return ret;
return 0;
Expand Down
4 changes: 2 additions & 2 deletions src/libcrun/container.h
Expand Up @@ -111,10 +111,10 @@ LIBCRUN_PUBLIC int libcrun_container_run (libcrun_context_t *context, libcrun_co
LIBCRUN_PUBLIC int libcrun_container_delete (libcrun_context_t *context, runtime_spec_schema_config_schema *def,
const char *id, bool force, libcrun_error_t *err);

LIBCRUN_PUBLIC int libcrun_container_kill (libcrun_context_t *context, const char *id, int signal,
LIBCRUN_PUBLIC int libcrun_container_kill (libcrun_context_t *context, const char *id, const char *signal,
libcrun_error_t *err);

LIBCRUN_PUBLIC int libcrun_container_kill_all (libcrun_context_t *context, const char *id, int signal,
LIBCRUN_PUBLIC int libcrun_container_kill_all (libcrun_context_t *context, const char *id, const char *signal,
libcrun_error_t *err);

LIBCRUN_PUBLIC int libcrun_container_create (libcrun_context_t *context, libcrun_container_t *container,
Expand Down

0 comments on commit 21a8daf

Please sign in to comment.