aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <holger@moiji-mobile.com>2013-12-29 19:38:01 +0100
committerHolger Hans Peter Freyther <holger@moiji-mobile.com>2013-12-29 19:38:01 +0100
commitb7d0f4686b4aa55fd9b69884e6cc0c4c79ea1cd5 (patch)
tree01954ad73fa9e60432a35bb3526c4a68afa930ba
parent6308c2971149c1f4f2f13846ca1a334a82b6519c (diff)
logging: Copy the filter_fn and fix the IMSI filter in OpenBSC
The filter_fn has not been copied into the new structure breaking the imsi and other filters in OpenBSC. Looking at the code we should also introduce a callback for the reset of the context so we could use subscr_get/subscr_put on the subscriber structure.
-rw-r--r--src/logging.c1
-rw-r--r--tests/logging/logging_test.c17
2 files changed, 18 insertions, 0 deletions
diff --git a/src/logging.c b/src/logging.c
index 214ad2ab..2e3a80ad 100644
--- a/src/logging.c
+++ b/src/logging.c
@@ -768,6 +768,7 @@ int log_init(const struct log_info *inf, void *ctx)
if (!osmo_log_info)
return -ENOMEM;
+ osmo_log_info->filter_fn = inf->filter_fn;
osmo_log_info->num_cat_user = inf->num_cat;
/* total number = number of user cat + library cat */
osmo_log_info->num_cat = inf->num_cat + ARRAY_SIZE(internal_cat);
diff --git a/tests/logging/logging_test.c b/tests/logging/logging_test.c
index fd62db5a..b263f905 100644
--- a/tests/logging/logging_test.c
+++ b/tests/logging/logging_test.c
@@ -21,12 +21,16 @@
#include <osmocom/core/logging.h>
#include <osmocom/core/utils.h>
+#include <stdlib.h>
+
enum {
DRLL,
DCC,
DMM,
};
+static int filter_called = 0;
+
static const struct log_info_cat default_categories[] = {
[DRLL] = {
.name = "DRLL",
@@ -48,9 +52,17 @@ static const struct log_info_cat default_categories[] = {
},
};
+static int test_filter(const struct log_context *ctx, struct log_target *target)
+{
+ filter_called += 1;
+ /* omit everything */
+ return 0;
+}
+
const struct log_info log_info = {
.cat = default_categories,
.num_cat = ARRAY_SIZE(default_categories),
+ .filter_fn = test_filter,
};
int main(int argc, char **argv)
@@ -71,6 +83,11 @@ int main(int argc, char **argv)
DEBUGP(DRLL, "You should see this\n");
DEBUGP(DCC, "You should see this\n");
DEBUGP(DMM, "You should not see this\n");
+ OSMO_ASSERT(filter_called == 0);
+
+ log_set_all_filter(stderr_target, 0);
+ DEBUGP(DRLL, "You should not see this and filter is called\n");
+ OSMO_ASSERT(filter_called == 1);
return 0;
}