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);