diff --git a/src/backend.cmod b/src/backend.cmod index 73e14c0710c0625f78bed0a7fffe6e878cb2155a..a9561ff6042c5ecd9a3792c959da8ddd37371965 100644 --- a/src/backend.cmod +++ b/src/backend.cmod @@ -2056,7 +2056,8 @@ PIKECLASS Backend * but it has not completed in time). */ static int low_backend_once_setup(struct Backend_struct *me, - struct timeval *start_time) + struct timeval *start_time, + ONERROR *uwp) { #ifdef PIKE_DEBUG struct timeval max_timeout; @@ -2129,6 +2130,8 @@ PIKECLASS Backend me->exec_thread = 1; #endif + LOW_SET_ONERROR(uwp, low_backend_cleanup, me); + /* Call outs */ if(me->num_pending_calls) if(next_timeout->tv_sec < 0 || @@ -3739,10 +3742,10 @@ static void noteEvents(CFFileDescriptorRef fdref, CFOptionFlags UNUSED(callBackT DECLARE_POLL_EXTRAS; #endif /* DECLARE_POLL_EXTRAS */ - if ((done_something = low_backend_once_setup(pdb->backend, &start_time))) { + if ((done_something = + low_backend_once_setup(pdb->backend, &start_time, &uwp))) { goto low_backend_round_done; } - SET_ONERROR(uwp, low_backend_cleanup, me); if (TYPEOF(me->before_callback) != T_INT) call_backend_monitor_cb (me, &me->before_callback); @@ -4612,10 +4615,10 @@ PIKECLASS PollBackend DECLARE_POLL_EXTRAS; #endif /* DECLARE_POLL_EXTRAS */ - if ((done_something = low_backend_once_setup(pb->backend, &start_time))) { + if ((done_something = + low_backend_once_setup(pb->backend, &start_time, &uwp))) { goto low_backend_round_done; } - SET_ONERROR(uwp, low_backend_cleanup, THIS->backend); if (TYPEOF(me->before_callback) != T_INT) call_backend_monitor_cb (me, &me->before_callback); @@ -5190,10 +5193,10 @@ PIKECLASS SelectBackend DECLARE_POLL_EXTRAS; #endif /* DECLARE_POLL_EXTRAS */ - if ((done_something = low_backend_once_setup(sb->backend, &start_time))) { + if ((done_something = + low_backend_once_setup(sb->backend, &start_time, &uwp))) { goto low_backend_round_done; } - SET_ONERROR(uwp, low_backend_cleanup, THIS->backend); if (TYPEOF(me->before_callback) != T_INT) call_backend_monitor_cb (me, &me->before_callback);