void SrvAgent::action_async(enum service_id service, qmf::AgentSession& session, qmf::AgentEvent& event, svc_action_t *op, bool has_rc) { op->cb_data = new AsyncCB(this, service, session, event, has_rc); services_action_async(op, AsyncCB::mh_async_callback); }
gboolean recurring_action_timer(gpointer data) { svc_action_t *op = data; crm_debug("Scheduling another invokation of %s", op->id); /* Clean out the old result */ free(op->stdout_data); op->stdout_data = NULL; free(op->stderr_data); op->stderr_data = NULL; services_action_async(op, NULL); return FALSE; }
gboolean Resources_invoke(Matahari *matahari, const char *name, const char *standard, const char *provider, const char *agent, const char *action, unsigned int interval, GHashTable *parameters, unsigned int timeout, unsigned int expected_rc, const char *userdata_in, DBusGMethodInvocation *context) { GError* error = NULL; svc_action_t *op = NULL; GList *standards; struct invoke_cb_data *data; if (!check_authorization(RESOURCES_INTERFACE_NAME ".invoke", &error, context)) { dbus_g_method_return_error(context, error); g_error_free(error); return FALSE; } // Check if standard is valid standards = resources_list_standards(); if (g_list_find_custom(standards, standard, (GCompareFunc) strcasecmp) == NULL) { mh_err("%s is not a known resource standard", standard); error = g_error_new(MATAHARI_ERROR, MH_RES_NOT_IMPLEMENTED, "%s is not a known resource standard", standard); dbus_g_method_return_error(context, error); g_error_free(error); g_list_free_full(standards, free); return FALSE; } g_list_free_full(standards, free); op = resources_action_create(name, standard, provider, agent, action, 0, timeout, g_hash_table_ref(parameters)); op->expected_rc = expected_rc; if (!(data = malloc(1 * sizeof(struct invoke_cb_data)))) { services_action_free(op); return FALSE; } data->context = context; data->userdata = strdup(userdata_in); op->cb_data = data; services_action_async(op, invoke_cb); return FALSE; }