struct agent_event *event =
caa_container_of(node, struct agent_event, node);
- free(event);
+ agent_destroy_event(event);
}
/*
app->pid, app->sock->fd);
data_size = sizeof(msg);
+ memset(&msg, 0, sizeof(msg));
+ if (lttng_strncpy(msg.name, event->name, sizeof(msg.name))) {
+ ret = LTTNG_ERR_INVALID;
+ goto error;
+ }
ret = send_header(app->sock, data_size, AGENT_CMD_DISABLE, 0);
if (ret < 0) {
goto error_io;
}
- memset(&msg, 0, sizeof(msg));
- strncpy(msg.name, event->name, sizeof(msg.name));
ret = send_payload(app->sock, &msg, sizeof(msg));
if (ret < 0) {
goto error_io;
DBG("Agent sending registration done to app socket %d", app->sock->fd);
- return send_header(app->sock, 0, AGENT_CMD_REG_DONE, 0);
+ return send_header(app->sock, 0, AGENT_CMD_REG_DONE, 1);
}
/*
int agent_disable_event(struct agent_event *event,
enum lttng_domain_type domain)
{
- int ret;
+ int ret = LTTNG_OK;
struct agent_app *app;
struct lttng_ht_iter iter;
assert(event);
+ if (!event->enabled) {
+ goto end;
+ }
rcu_read_lock();
}
event->enabled = 0;
- ret = LTTNG_OK;
error:
rcu_read_unlock();
+end:
return ret;
}
assert(event);
free(event->filter);
+ free(event->filter_expression);
free(event);
}
/*
- * Destroy an agent completely. Note that the given pointer is NOT freed
- * thus a reference to static or stack data can be passed to this function.
+ * Destroy an agent completely.
*/
void agent_destroy(struct agent *agt)
{
rcu_read_unlock();
ht_cleanup_push(agt->events);
+ free(agt);
}
/*
struct lttng_ht_node_ulong *node;
struct lttng_ht_iter iter;
+ if (!agent_apps_ht_by_sock) {
+ return;
+ }
rcu_read_lock();
cds_lfht_for_each_entry(agent_apps_ht_by_sock->ht, &iter.iter, node, node) {
struct agent_app *app;