From: Krzysztof Opasiak Date: Wed, 17 May 2017 20:48:45 +0000 (+0200) Subject: Add default implementation of system reboot action X-Git-Tag: submit/tizen/20170622.101818~38 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bb2984ed99811e897eef06cc60f8c9eb8d0f7ac3;p=platform%2Fcore%2Fsystem%2Ffaultd.git Add default implementation of system reboot action Change-Id: Ib6c0f18dc7037bf1b0bc5259bfad023ec00ea330 Signed-off-by: Krzysztof Opasiak --- diff --git a/Makefile.am b/Makefile.am index c25b279..8b609ea 100644 --- a/Makefile.am +++ b/Makefile.am @@ -39,6 +39,7 @@ faultd_SOURCES = \ src/action/action_executor.c \ src/action/service_recover.c \ src/action/service_restart.c \ + src/action/system_reboot.c \ src/core/event.c \ src/core/event_processor.c \ src/core/service.c \ diff --git a/src/action/system_reboot.c b/src/action/system_reboot.c new file mode 100644 index 0000000..78a77be --- /dev/null +++ b/src/action/system_reboot.c @@ -0,0 +1,55 @@ +/* + * faultd + * + * Copyright © 2017 Samsung Electronics + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "action.h" +#include "action_executor.h" +#include "decision_made_event.h" +#include "log.h" +#include "systemd_dbus.h" + +static int reboot_system(struct faultd_action *action) +{ + struct faultd_event *ev = nqueue_pop(&action->execution_queue, + struct faultd_event, nq_node); + int ret; + + /* + * We reboot the system without using logind because this action may be + * executed when for example dbus daemon is dead + */ + ret = faultd_dbus_call_systemd_simple(SYSTEMD_OBJ, + SYSTEMD_MANAGER_INTERFACE, + "StartUnit", + "ss", + "reboot.target", + "replace-irreversibly"); + if (ret < 0) + log_error_errno(ret, "Failed to reboot the system"); + + faultd_event_unref(ev); + return 0; +} + +static struct faultd_action system_reboot_action = { + .action_id = FAULTD_ACTION_REBOOT_ID, + .impl_name = FAULTD_DEFAULT_ACTION_IMPL, + .execute = reboot_system, + .node = LIST_HEAD_INIT(system_reboot_action.node), +}; + +FAULTD_ACTION_REGISTER_SIMPLE(system_reboot_action);