nostrdb: filters: copy filter metadata into subscription
This fixes a few ownership issues Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
committed by
Daniel D’Aquino
parent
62625c6ff3
commit
1b77b4f0e0
@@ -178,7 +178,7 @@ struct ndb_ingester {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct ndb_filter_group {
|
struct ndb_filter_group {
|
||||||
struct ndb_filter *filters[MAX_FILTERS];
|
struct ndb_filter filters[MAX_FILTERS];
|
||||||
int num_filters;
|
int num_filters;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -973,7 +973,7 @@ static int ndb_filter_group_add(struct ndb_filter_group *group,
|
|||||||
if (group->num_filters + 1 > MAX_FILTERS)
|
if (group->num_filters + 1 > MAX_FILTERS)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
group->filters[group->num_filters++] = filter;
|
memcpy(&group->filters[group->num_filters++], filter, sizeof(*filter));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -987,7 +987,7 @@ static int ndb_filter_group_matches(struct ndb_filter_group *group,
|
|||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
for (i = 0; i < group->num_filters; i++) {
|
for (i = 0; i < group->num_filters; i++) {
|
||||||
filter = group->filters[i];
|
filter = &group->filters[i];
|
||||||
|
|
||||||
if (ndb_filter_matches(filter, note))
|
if (ndb_filter_matches(filter, note))
|
||||||
return 1;
|
return 1;
|
||||||
@@ -3975,7 +3975,7 @@ void ndb_filter_group_destroy(struct ndb_filter_group *group)
|
|||||||
struct ndb_filter *filter;
|
struct ndb_filter *filter;
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < group->num_filters; i++) {
|
for (i = 0; i < group->num_filters; i++) {
|
||||||
filter = group->filters[i];
|
filter = &group->filters[i];
|
||||||
ndb_filter_destroy(filter);
|
ndb_filter_destroy(filter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5663,10 +5663,8 @@ uint64_t ndb_subscribe(struct ndb *ndb, struct ndb_filter *filters, int num_filt
|
|||||||
sub->subid = subid;
|
sub->subid = subid;
|
||||||
|
|
||||||
ndb_filter_group_init(&sub->group);
|
ndb_filter_group_init(&sub->group);
|
||||||
for (index = 0; index < num_filters; index++) {
|
if (!ndb_filter_group_add_filters(&sub->group, filters, num_filters))
|
||||||
if (!ndb_filter_group_add(&sub->group, &filters[index]))
|
return 0;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 500k ought to be enough for anyone
|
// 500k ought to be enough for anyone
|
||||||
buflen = sizeof(uint64_t) * 65536;
|
buflen = sizeof(uint64_t) * 65536;
|
||||||
|
|||||||
Reference in New Issue
Block a user