projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Cleanup: kmod library detection
[lttng-tools.git]
/
src
/
bin
/
lttng-sessiond
/
ust-registry.c
diff --git
a/src/bin/lttng-sessiond/ust-registry.c
b/src/bin/lttng-sessiond/ust-registry.c
index 80ea2e57054de736ac0801b01d4ed0bb8b0cb6a5..88d66317001da76386794acaaef45ed62678b819 100644
(file)
--- a/
src/bin/lttng-sessiond/ust-registry.c
+++ b/
src/bin/lttng-sessiond/ust-registry.c
@@
-26,6
+26,8
@@
#include "ust-registry.h"
#include "ust-app.h"
#include "utils.h"
#include "ust-registry.h"
#include "ust-app.h"
#include "utils.h"
+#include "lttng-sessiond.h"
+#include "notification-thread-commands.h"
/*
* Hash table match function for event in the registry.
/*
* Hash table match function for event in the registry.
@@
-89,14
+91,23
@@
static int compare_enums(const struct ust_registry_enum *reg_enum_a,
entries_a = ®_enum_a->entries[i];
entries_b = ®_enum_b->entries[i];
entries_a = ®_enum_a->entries[i];
entries_b = ®_enum_b->entries[i];
- if (entries_a->start
!= entries_b->start
) {
+ if (entries_a->start
.value != entries_b->start.value
) {
ret = -1;
goto end;
}
ret = -1;
goto end;
}
- if (entries_a->end
!= entries_b->end
) {
+ if (entries_a->end
.value != entries_b->end.value
) {
ret = -1;
goto end;
}
ret = -1;
goto end;
}
+ if (entries_a->start.signedness != entries_b->start.signedness) {
+ ret = -1;
+ goto end;
+ }
+ if (entries_a->end.signedness != entries_b->end.signedness) {
+ ret = -1;
+ goto end;
+ }
+
if (strcmp(entries_a->string, entries_b->string)) {
ret = -1;
goto end;
if (strcmp(entries_a->string, entries_b->string)) {
ret = -1;
goto end;
@@
-188,12
+199,22
@@
int validate_event_field(struct ustctl_field *field,
const char *event_name,
struct ust_app *app)
{
const char *event_name,
struct ust_app *app)
{
+ int ret = 0;
+
switch(field->type.atype) {
case ustctl_atype_integer:
case ustctl_atype_enum:
case ustctl_atype_array:
case ustctl_atype_sequence:
case ustctl_atype_string:
switch(field->type.atype) {
case ustctl_atype_integer:
case ustctl_atype_enum:
case ustctl_atype_array:
case ustctl_atype_sequence:
case ustctl_atype_string:
+ case ustctl_atype_variant:
+ break;
+ case ustctl_atype_struct:
+ if (field->type.u._struct.nr_fields != 0) {
+ WARN("Unsupported non-empty struct field.");
+ ret = -EINVAL;
+ goto end;
+ }
break;
case ustctl_atype_float:
break;
case ustctl_atype_float:
@@
-205,16
+226,19
@@
int validate_event_field(struct ustctl_field *field,
field->type.u.basic._float.mant_dig,
field->name,
event_name);
field->type.u.basic._float.mant_dig,
field->name,
event_name);
- return -EINVAL;
+ ret = -EINVAL;
+ goto end;
default:
break;
}
break;
default:
default:
break;
}
break;
default:
- return -ENOENT;
+ ret = -ENOENT;
+ goto end;
}
}
- return 0;
+end:
+ return ret;
}
static
}
static
@@
-673,13
+697,23
@@
void destroy_channel_rcu(struct rcu_head *head)
* free the registry pointer since it might not have been allocated before so
* it's the caller responsability.
*/
* free the registry pointer since it might not have been allocated before so
* it's the caller responsability.
*/
-static void destroy_channel(struct ust_registry_channel *chan)
+static void destroy_channel(struct ust_registry_channel *chan
, bool notif
)
{
struct lttng_ht_iter iter;
struct ust_registry_event *event;
{
struct lttng_ht_iter iter;
struct ust_registry_event *event;
+ enum lttng_error_code cmd_ret;
assert(chan);
assert(chan);
+ if (notif) {
+ cmd_ret = notification_thread_command_remove_channel(
+ notification_thread_handle, chan->consumer_key,
+ LTTNG_DOMAIN_UST);
+ if (cmd_ret != LTTNG_OK) {
+ ERR("Failed to remove channel from notification thread");
+ }
+ }
+
rcu_read_lock();
/* Destroy all event associated with this registry. */
cds_lfht_for_each_entry(chan->ht->ht, &iter.iter, event, node.node) {
rcu_read_lock();
/* Destroy all event associated with this registry. */
cds_lfht_for_each_entry(chan->ht->ht, &iter.iter, event, node.node) {
@@
-737,7
+771,7
@@
int ust_registry_channel_add(struct ust_registry_session *session,
return 0;
error:
return 0;
error:
- destroy_channel(chan);
+ destroy_channel(chan
, false
);
error_alloc:
return ret;
}
error_alloc:
return ret;
}
@@
-776,7
+810,7
@@
end:
* Remove channel using key from registry and free memory.
*/
void ust_registry_channel_del_free(struct ust_registry_session *session,
* Remove channel using key from registry and free memory.
*/
void ust_registry_channel_del_free(struct ust_registry_session *session,
- uint64_t key)
+ uint64_t key
, bool notif
)
{
struct lttng_ht_iter iter;
struct ust_registry_channel *chan;
{
struct lttng_ht_iter iter;
struct ust_registry_channel *chan;
@@
-795,7
+829,7
@@
void ust_registry_channel_del_free(struct ust_registry_session *session,
ret = lttng_ht_del(session->channels, &iter);
assert(!ret);
rcu_read_unlock();
ret = lttng_ht_del(session->channels, &iter);
assert(!ret);
rcu_read_unlock();
- destroy_channel(chan);
+ destroy_channel(chan
, notif
);
end:
return;
end:
return;
@@
-847,6
+881,8
@@
int ust_registry_session_init(struct ust_registry_session **sessionp,
session->uid = euid;
session->gid = egid;
session->next_enum_id = 0;
session->uid = euid;
session->gid = egid;
session->next_enum_id = 0;
+ session->major = major;
+ session->minor = minor;
strncpy(session->root_shm_path, root_shm_path,
sizeof(session->root_shm_path));
session->root_shm_path[sizeof(session->root_shm_path) - 1] = '\0';
strncpy(session->root_shm_path, root_shm_path,
sizeof(session->root_shm_path));
session->root_shm_path[sizeof(session->root_shm_path) - 1] = '\0';
@@
-948,7
+984,7
@@
void ust_registry_session_destroy(struct ust_registry_session *reg)
/* Delete the node from the ht and free it. */
ret = lttng_ht_del(reg->channels, &iter);
assert(!ret);
/* Delete the node from the ht and free it. */
ret = lttng_ht_del(reg->channels, &iter);
assert(!ret);
- destroy_channel(chan);
+ destroy_channel(chan
, true
);
}
rcu_read_unlock();
ht_cleanup_push(reg->channels);
}
rcu_read_unlock();
ht_cleanup_push(reg->channels);
@@
-970,7
+1006,7
@@
void ust_registry_session_destroy(struct ust_registry_session *reg)
/*
* Try deleting the directory hierarchy.
*/
/*
* Try deleting the directory hierarchy.
*/
- (void) run_as_r
ecursive_rmdir
(reg->root_shm_path,
+ (void) run_as_r
mdir_recursive
(reg->root_shm_path,
reg->uid, reg->gid);
}
/* Destroy the enum hash table */
reg->uid, reg->gid);
}
/* Destroy the enum hash table */
This page took
0.026732 seconds
and
5
git commands to generate.