diff --git a/lib/modules/Concurrent.pmod b/lib/modules/Concurrent.pmod
index bf855169282a16f572efe257fbca0e4f87c998a0..160083762889ac6f4f9904b266148c4604b79a95 100644
--- a/lib/modules/Concurrent.pmod
+++ b/lib/modules/Concurrent.pmod
@@ -906,8 +906,20 @@ class Promise
             function(mixed:void), mixed ...:void) executor, mixed ... extra)
   {
     state = STATE_NO_FUTURE;
-    if (executor)
-      executor(success, failure, @extra);
+
+    if (executor) {
+      mixed err = catch(executor(success, failure, @extra));
+
+      // This unfortunately does hide the real error in case of
+      // double-finalization, i.e.
+      //   fail("I reject!");
+      //   error("I rejected.\n");
+      // in the executor will leave our caller with an error about the
+      // Promise already having been finalized, not giving anyone too much
+      // information about where the double-finalization occured...
+      if (err)
+        failure(err);
+    }
   }
 
   Future on_success(function(mixed, mixed ... : void) cb, mixed ... extra)