From 8a0e19a7702f61622d06b1c473fb3d9a5924c8f4 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 14 Jan 2020 18:07:18 -0600 Subject: [PATCH 05/18] Refactor: liblrmd: new convenience function for allocating lrmd_event_data_t --- daemons/controld/controld_execd.c | 7 +------ include/crm/lrmd.h | 2 ++ lib/lrmd/lrmd_client.c | 34 +++++++++++++++++++++++++++++++++- lib/pacemaker/pcmk_sched_transition.c | 7 +------ lib/pacemaker/pcmk_trans_unpack.c | 9 +++------ 5 files changed, 40 insertions(+), 19 deletions(-) diff --git a/daemons/controld/controld_execd.c b/daemons/controld/controld_execd.c index 82f2bf1..17cc8d6 100644 --- a/daemons/controld/controld_execd.c +++ b/daemons/controld/controld_execd.c @@ -1878,15 +1878,10 @@ construct_op(lrm_state_t * lrm_state, xmlNode * rsc_op, const char *rsc_id, cons CRM_ASSERT(rsc_id && operation); - op = calloc(1, sizeof(lrmd_event_data_t)); - CRM_ASSERT(op != NULL); - + op = lrmd_new_event(rsc_id, operation, 0); op->type = lrmd_event_exec_complete; - op->op_type = strdup(operation); op->op_status = PCMK_LRM_OP_PENDING; op->rc = -1; - op->rsc_id = strdup(rsc_id); - op->interval_ms = 0; op->timeout = 0; op->start_delay = 0; diff --git a/include/crm/lrmd.h b/include/crm/lrmd.h index cfa2925..3ad1f05 100644 --- a/include/crm/lrmd.h +++ b/include/crm/lrmd.h @@ -248,6 +248,8 @@ typedef struct lrmd_event_data_s { const char *exit_reason; } lrmd_event_data_t; +lrmd_event_data_t *lrmd_new_event(const char *rsc_id, const char *task, + guint interval_ms); lrmd_event_data_t *lrmd_copy_event(lrmd_event_data_t * event); void lrmd_free_event(lrmd_event_data_t * event); diff --git a/lib/lrmd/lrmd_client.c b/lib/lrmd/lrmd_client.c index 2469c52..d16743d 100644 --- a/lib/lrmd/lrmd_client.c +++ b/lib/lrmd/lrmd_client.c @@ -1,5 +1,7 @@ /* - * Copyright 2012-2018 David Vossel + * Copyright 2012-2020 the Pacemaker project contributors + * + * The version control history for this file may have further details. * * This source code is licensed under the GNU Lesser General Public License * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY. @@ -175,6 +177,36 @@ lrmd_key_value_freeall(lrmd_key_value_t * head) } } +/*! + * Create a new lrmd_event_data_t object + * + * \param[in] rsc_id ID of resource involved in event + * \param[in] task Action name + * \param[in] interval_ms Action interval + * + * \return Newly allocated and initialized lrmd_event_data_t + * \note This functions asserts on memory errors, so the return value is + * guaranteed to be non-NULL. The caller is responsible for freeing the + * result with lrmd_free_event(). + */ +lrmd_event_data_t * +lrmd_new_event(const char *rsc_id, const char *task, guint interval_ms) +{ + lrmd_event_data_t *event = calloc(1, sizeof(lrmd_event_data_t)); + + CRM_ASSERT(event != NULL); + if (rsc_id != NULL) { + event->rsc_id = strdup(rsc_id); + CRM_ASSERT(event->rsc_id != NULL); + } + if (task != NULL) { + event->op_type = strdup(task); + CRM_ASSERT(event->op_type != NULL); + } + event->interval_ms = interval_ms; + return event; +} + lrmd_event_data_t * lrmd_copy_event(lrmd_event_data_t * event) { diff --git a/lib/pacemaker/pcmk_sched_transition.c b/lib/pacemaker/pcmk_sched_transition.c index c415b75..1698c85 100644 --- a/lib/pacemaker/pcmk_sched_transition.c +++ b/lib/pacemaker/pcmk_sched_transition.c @@ -131,12 +131,7 @@ create_op(xmlNode *cib_resource, const char *task, guint interval_ms, lrmd_event_data_t *op = NULL; xmlNode *xop = NULL; - op = calloc(1, sizeof(lrmd_event_data_t)); - - op->rsc_id = strdup(ID(cib_resource)); - op->interval_ms = interval_ms; - op->op_type = strdup(task); - + op = lrmd_new_event(ID(cib_resource), task, interval_ms); op->rc = outcome; op->op_status = 0; op->params = NULL; /* TODO: Fill me in */ diff --git a/lib/pacemaker/pcmk_trans_unpack.c b/lib/pacemaker/pcmk_trans_unpack.c index e57f386..3e53289 100644 --- a/lib/pacemaker/pcmk_trans_unpack.c +++ b/lib/pacemaker/pcmk_trans_unpack.c @@ -298,12 +298,9 @@ convert_graph_action(xmlNode * resource, crm_action_t * action, int status, int CRM_CHECK(action_resource != NULL, crm_log_xml_warn(action->xml, "Bad"); return NULL); - op = calloc(1, sizeof(lrmd_event_data_t)); - - op->rsc_id = strdup(ID(action_resource)); - op->interval_ms = action->interval_ms; - op->op_type = strdup(crm_element_value(action->xml, XML_LRM_ATTR_TASK)); - + op = lrmd_new_event(ID(action_resource), + crm_element_value(action->xml, XML_LRM_ATTR_TASK), + action->interval_ms); op->rc = rc; op->op_status = status; op->t_run = time(NULL); -- 1.8.3.1