1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-28 01:58:17 +03:00

fixed a logic bug in the tevent nesting code

The event nesting code never triggered as nesting.level was never
greater than 1. The main event loop needs to increase the nesting
level by 1.

I also added a paranoia check to the nesting setup call. The API as
currently written cannot support multiple nesting hooks, so we need to
abort if multiple hooks are tried.
This commit is contained in:
Andrew Tridgell 2009-03-19 11:21:36 +11:00
parent 710948c788
commit 13b6663e23

View File

@ -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;
}