projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: RCU read-side lock released too early in destroy_agent_app
[lttng-tools.git]
/
src
/
bin
/
lttng-sessiond
/
agent.c
diff --git
a/src/bin/lttng-sessiond/agent.c
b/src/bin/lttng-sessiond/agent.c
index 1c1c6ab18ad4fc341f805288de1092f667bedb85..1eb64c25e32b937282bd5f1b45c7442d3909b188 100644
(file)
--- a/
src/bin/lttng-sessiond/agent.c
+++ b/
src/bin/lttng-sessiond/agent.c
@@
-16,6
+16,7
@@
*/
#define _GNU_SOURCE
*/
#define _GNU_SOURCE
+#define _LGPL_SOURCE
#include <assert.h>
#include <urcu/uatomic.h>
#include <assert.h>
#include <urcu/uatomic.h>
@@
-539,6
+540,8
@@
int agent_list_events(struct lttng_event **events,
assert(events);
assert(events);
+ DBG2("Agent listing events for domain %d", domain);
+
nbmem = UST_APP_EVENT_LIST_SIZE;
tmp_events = zmalloc(nbmem * sizeof(*tmp_events));
if (!tmp_events) {
nbmem = UST_APP_EVENT_LIST_SIZE;
tmp_events = zmalloc(nbmem * sizeof(*tmp_events));
if (!tmp_events) {
@@
-677,6
+680,8
@@
void agent_add_app(struct agent_app *app)
/*
* Delete agent application from the global hash table.
/*
* Delete agent application from the global hash table.
+ *
+ * rcu_read_lock() must be held by the caller.
*/
void agent_delete_app(struct agent_app *app)
{
*/
void agent_delete_app(struct agent_app *app)
{
@@
-688,9
+693,7
@@
void agent_delete_app(struct agent_app *app)
DBG3("Agent deleting app pid: %d and sock: %d", app->pid, app->sock->fd);
iter.iter.node = &app->node.node;
DBG3("Agent deleting app pid: %d and sock: %d", app->pid, app->sock->fd);
iter.iter.node = &app->node.node;
- rcu_read_lock();
ret = lttng_ht_del(agent_apps_ht_by_sock, &iter);
ret = lttng_ht_del(agent_apps_ht_by_sock, &iter);
- rcu_read_unlock();
assert(!ret);
}
assert(!ret);
}
@@
-897,7
+900,7
@@
struct agent_event *agent_find_event(const char *name, int loglevel,
return caa_container_of(node, struct agent_event, node);
error:
return caa_container_of(node, struct agent_event, node);
error:
- DBG3("Agent NOT found %s.", name);
+ DBG3("Agent
event
NOT found %s.", name);
return NULL;
}
return NULL;
}
@@
-910,6
+913,7
@@
void agent_destroy_event(struct agent_event *event)
{
assert(event);
{
assert(event);
+ free(event->filter);
free(event);
}
free(event);
}
@@
-953,7
+957,7
@@
void agent_destroy(struct agent *agt)
}
rcu_read_unlock();
}
rcu_read_unlock();
-
lttng_ht_destroy
(agt->events);
+
ht_cleanup_push
(agt->events);
}
/*
}
/*
This page took
0.025776 seconds
and
4
git commands to generate.