From 88d1a0b7d8a6dc9061ad0ddc3a471f68eb53f9a7 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Tue, 17 Dec 2019 14:11:36 -0500 Subject: [PATCH] lib: remove bt_query_executor_interrupt, add bt_query_executor_borrow_default_interrupter It is currently possible to interrupt a running quer executor with bt_query_executor_interrupt. It is however not possible to reset the default interrupter that this function sets and resume the query execution. Rather than add a new query executor function to reset the default query executor interrupter, introduce a new function, bt_query_executor_borrow_default_interrupter, to borrow that default interrupter. All the bt_interrupter API is therefore accessible with this default interrupter. This patch removes the bt_query_executor_interrupt function, since it's no longer needed. Change-Id: I877dfbf22e36233750a71220fc5ab0297f8c0c28 Signed-off-by: Simon Marchi Reviewed-on: https://review.lttng.org/c/babeltrace/+/2709 Tested-by: jenkins Reviewed-by: Philippe Proulx --- include/babeltrace2/graph/query-executor.h | 3 ++- src/bindings/python/bt2/bt2/query_executor.py | 6 ++++-- src/lib/graph/query-executor.c | 7 +++---- tests/bindings/python/bt2/test_query_executor.py | 11 ++++++++++- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/include/babeltrace2/graph/query-executor.h b/include/babeltrace2/graph/query-executor.h index 6097519f..c393e6ec 100644 --- a/include/babeltrace2/graph/query-executor.h +++ b/include/babeltrace2/graph/query-executor.h @@ -65,7 +65,8 @@ extern bt_query_executor_add_interrupter_status bt_query_executor_add_interrupter(bt_query_executor *query_executor, const bt_interrupter *interrupter); -extern void bt_query_executor_interrupt(bt_query_executor *query_executor); +extern bt_interrupter *bt_query_executor_borrow_default_interrupter( + bt_query_executor *query_executor); typedef enum bt_query_executor_set_logging_level_status { BT_QUERY_EXECUTOR_SET_LOGGING_LEVEL_STATUS_OK = __BT_FUNC_STATUS_OK, diff --git a/src/bindings/python/bt2/bt2/query_executor.py b/src/bindings/python/bt2/bt2/query_executor.py index 2f82d16b..57c32589 100644 --- a/src/bindings/python/bt2/bt2/query_executor.py +++ b/src/bindings/python/bt2/bt2/query_executor.py @@ -104,8 +104,10 @@ class QueryExecutor(object._SharedObject, _QueryExecutorCommon): utils._check_type(interrupter, bt2_interrupter.Interrupter) native_bt.query_executor_add_interrupter(self._ptr, interrupter._ptr) - def interrupt(self): - native_bt.query_executor_interrupt(self._ptr) + @property + def default_interrupter(self): + ptr = native_bt.query_executor_borrow_default_interrupter(self._ptr) + return bt2_interrupter.Interrupter._create_from_ptr_and_get_ref(ptr) def _set_logging_level(self, log_level): utils._check_log_level(log_level) diff --git a/src/lib/graph/query-executor.c b/src/lib/graph/query-executor.c index 9a78d790..bc6f542a 100644 --- a/src/lib/graph/query-executor.c +++ b/src/lib/graph/query-executor.c @@ -277,12 +277,11 @@ bt_bool bt_query_executor_is_interrupted(const struct bt_query_executor *query_e query_exec->interrupters); } -void bt_query_executor_interrupt(struct bt_query_executor *query_exec) +struct bt_interrupter *bt_query_executor_borrow_default_interrupter( + struct bt_query_executor *query_exec) { BT_ASSERT_PRE_NON_NULL(query_exec, "Query executor"); - bt_interrupter_set(query_exec->default_interrupter); - BT_LIB_LOGI("Interrupted query executor: query-exec-addr=%p", - query_exec); + return query_exec->default_interrupter; } enum bt_query_executor_set_logging_level_status diff --git a/tests/bindings/python/bt2/test_query_executor.py b/tests/bindings/python/bt2/test_query_executor.py index 000de069..a22f5d7d 100644 --- a/tests/bindings/python/bt2/test_query_executor.py +++ b/tests/bindings/python/bt2/test_query_executor.py @@ -22,6 +22,15 @@ import re class QueryExecutorTestCase(unittest.TestCase): + def test_default_interrupter(self): + class MySink(bt2._UserSinkComponent): + def _user_consume(self): + pass + + query_exec = bt2.QueryExecutor(MySink, 'obj') + interrupter = query_exec.default_interrupter + self.assertIs(type(interrupter), bt2.Interrupter) + def test_query(self): class MySink(bt2._UserSinkComponent): def _user_consume(self): @@ -262,7 +271,7 @@ class QueryExecutorTestCase(unittest.TestCase): @classmethod def _user_query(cls, priv_query_exec, obj, params, method_obj): test_self.assertFalse(query_exec.is_interrupted) - query_exec.interrupt() + query_exec.default_interrupter.set() test_self.assertTrue(query_exec.is_interrupted) test_self = self -- 2.34.1