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:
parent
710948c788
commit
13b6663e23
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user