From 198d2b82a7a9b0820151363efe19dd79356ab64c Mon Sep 17 00:00:00 2001
From: Arne Goedeke <el@laramies.com>
Date: Tue, 21 Apr 2015 19:47:19 +0200
Subject: [PATCH] Thread.Farm: pass exceptions to provide_error

In case an exception was thrown, the value of err ended up being
the Result object, while the error got lost.
---
 lib/modules/Thread.pmod | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/lib/modules/Thread.pmod b/lib/modules/Thread.pmod
index 8b6688b4cb..915fb34566 100644
--- a/lib/modules/Thread.pmod
+++ b/lib/modules/Thread.pmod
@@ -539,10 +539,16 @@ optional class Farm
         {
           mixed res, err;
           int st = gethrtime();
-          if( err = catch(res = q[1][0]( @q[1][1] )) && q[0])
-            ([object]q[0])->provide_error( err );
-          else if( q[0] )
-            ([object]q[0])->provide( res );
+
+          err = catch(res = q[1][0]( @q[1][1] ));
+
+          if( q[0] )
+          {
+            if( err )
+              ([object]q[0])->provide_error( err );
+            else
+              ([object]q[0])->provide( res );
+          }
           object lock = mutex->lock();
           free_threads += ({ this });
           lock = 0;
-- 
GitLab