summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/tevent/tevent.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/tevent/tevent.c b/lib/tevent/tevent.c
index ba2d93f4b9..56fd6aec7a 100644
--- a/lib/tevent/tevent.c
+++ b/lib/tevent/tevent.c
@@ -427,6 +427,14 @@ void tevent_loop_set_nesting_hook(struct tevent_context *ev,
tevent_nesting_hook hook,
void *private_data)
{
+ if (ev->nesting.hook_fn &&
+ (ev->nesting.hook_fn != hook ||
+ ev->nesting.hook_private != private_data)) {
+ /* the way the nesting hook code is currently written
+ we cannot support two different nesting hooks at the
+ same time. */
+ tevent_abort(ev, "tevent: Violation of nesting hook rules\n");
+ }
ev->nesting.hook_fn = hook;
ev->nesting.hook_private = private_data;
}
@@ -593,5 +601,9 @@ int tevent_common_loop_wait(struct tevent_context *ev,
*/
int _tevent_loop_wait(struct tevent_context *ev, const char *location)
{
- return ev->ops->loop_wait(ev, location);
+ int ret;
+ ev->nesting.level++;
+ ret = ev->ops->loop_wait(ev, location);
+ ev->nesting.level--;
+ return ret;
}