projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Rename rotate_count to current_archive_id
[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 dea443d94fbb1e74fc9ecffd105cb3bf1fe7b42d..ed830b60821cc67154879c629655f48e7b62bf10 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.
@@
-60,10
+62,10
@@
no_match:
return 0;
}
return 0;
}
-static unsigned long ht_hash_event(void *_key, unsigned long seed)
+static unsigned long ht_hash_event(
const
void *_key, unsigned long seed)
{
uint64_t xored_key;
{
uint64_t xored_key;
- struct ust_registry_event *key = _key;
+
const
struct ust_registry_event *key = _key;
assert(key);
assert(key);
@@
-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;
@@
-686,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) {
@@
-750,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;
}
@@
-789,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;
@@
-808,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;
@@
-899,7
+920,7
@@
int ust_registry_session_init(struct ust_registry_session **sessionp,
session->enums = lttng_ht_new(0, LTTNG_HT_TYPE_STRING);
if (!session->enums) {
session->enums = lttng_ht_new(0, LTTNG_HT_TYPE_STRING);
if (!session->enums) {
-
ret = -ENOMEM
;
+
ERR("Failed to create enums hash table")
;
goto error;
}
/* hash/match functions are specified at call site. */
goto error;
}
/* hash/match functions are specified at call site. */
@@
-963,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);
@@
-985,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.028441 seconds
and
5
git commands to generate.