projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix out of order channel insert in hash table
[lttng-tools.git]
/
lttng-sessiond
/
ust-app.c
diff --git
a/lttng-sessiond/ust-app.c
b/lttng-sessiond/ust-app.c
index d34134e94dbce9ab089c065b570cb01689e772e3..4f68a87eecd86270cc0011cd528d38c79ec3fc96 100644
(file)
--- a/
lttng-sessiond/ust-app.c
+++ b/
lttng-sessiond/ust-app.c
@@
-584,7
+584,7
@@
static int create_ust_channel(struct ust_app *app,
ret = ustctl_create_channel(app->key.sock, ua_sess->handle,
(struct lttng_ust_channel_attr *)&ua_chan->attr, &ua_chan->obj);
if (ret < 0) {
ret = ustctl_create_channel(app->key.sock, ua_sess->handle,
(struct lttng_ust_channel_attr *)&ua_chan->attr, &ua_chan->obj);
if (ret < 0) {
-
DBG("Error c
reating channel %s for app (pid: %d, sock: %d) "
+
ERR("C
reating channel %s for app (pid: %d, sock: %d) "
"and session handle %d with ret %d",
ua_chan->name, app->key.pid, app->key.sock,
ua_sess->handle, ret);
"and session handle %d with ret %d",
ua_chan->name, app->key.pid, app->key.sock,
ua_sess->handle, ret);
@@
-794,7
+794,7
@@
void __lookup_session_by_app(struct ltt_ust_session *usess,
struct ust_app *app, struct lttng_ht_iter *iter)
{
/* Get right UST app session from app */
struct ust_app *app, struct lttng_ht_iter *iter)
{
/* Get right UST app session from app */
- lttng_ht_lookup(app->sessions, (void *)((unsigned long) usess->
u
id), iter);
+ lttng_ht_lookup(app->sessions, (void *)((unsigned long) usess->id), iter);
}
/*
}
/*
@@
-856,7
+856,7
@@
static struct ust_app_session *create_ust_app_session(
ua_sess->handle = ret;
/* Add ust app session to app's HT */
ua_sess->handle = ret;
/* Add ust app session to app's HT */
- lttng_ht_node_init_ulong(&ua_sess->node, (unsigned long) ua_sess->
u
id);
+ lttng_ht_node_init_ulong(&ua_sess->node, (unsigned long) ua_sess->id);
lttng_ht_add_unique_ulong(app->sessions, &ua_sess->node);
DBG2("UST app session created successfully with handle %d", ret);
lttng_ht_add_unique_ulong(app->sessions, &ua_sess->node);
DBG2("UST app session created successfully with handle %d", ret);
@@
-1062,8
+1062,6
@@
static struct ust_app_channel *create_ust_app_channel(
goto error;
}
shadow_copy_channel(ua_chan, uchan);
goto error;
}
shadow_copy_channel(ua_chan, uchan);
-
- lttng_ht_add_unique_str(ua_sess->channels, &ua_chan->node);
} else {
ua_chan = caa_container_of(ua_chan_node, struct ust_app_channel, node);
}
} else {
ua_chan = caa_container_of(ua_chan_node, struct ust_app_channel, node);
}
@@
-1073,6
+1071,8
@@
static struct ust_app_channel *create_ust_app_channel(
goto error;
}
goto error;
}
+ lttng_ht_add_unique_str(ua_sess->channels, &ua_chan->node);
+
return ua_chan;
error:
return ua_chan;
error:
@@
-1299,6
+1299,11
@@
void ust_app_unregister(int sock)
DBG("PID %d unregistering with sock %d", lta->key.pid, sock);
DBG("PID %d unregistering with sock %d", lta->key.pid, sock);
+ /* Remove application from socket hash table */
+ lttng_ht_lookup(ust_app_sock_key_map, (void *)((unsigned long) sock), &iter);
+ ret = lttng_ht_del(ust_app_sock_key_map, &iter);
+ assert(!ret);
+
/* Get the node reference for a call_rcu */
lttng_ht_lookup(ust_app_ht, (void *)((unsigned long) lta->key.pid), &iter);
node = lttng_ht_iter_get_node_ulong(&iter);
/* Get the node reference for a call_rcu */
lttng_ht_lookup(ust_app_ht, (void *)((unsigned long) lta->key.pid), &iter);
node = lttng_ht_iter_get_node_ulong(&iter);
@@
-1307,6
+1312,7
@@
void ust_app_unregister(int sock)
goto error;
}
goto error;
}
+ /* Remove application from PID hash table */
ret = lttng_ht_del(ust_app_ht, &iter);
assert(!ret);
call_rcu(&node->head, delete_ust_app_rcu);
ret = lttng_ht_del(ust_app_ht, &iter);
assert(!ret);
call_rcu(&node->head, delete_ust_app_rcu);
This page took
0.024486 seconds
and
4
git commands to generate.