diff --git a/mysql-test/r/sp-fib.result b/mysql-test/r/sp-fib.result
index c51aa7d7ad1682b93346397a86c5ad3ce6399577..a26e104c1e8319bcea3be852dba38f6428b1069c 100644
--- a/mysql-test/r/sp-fib.result
+++ b/mysql-test/r/sp-fib.result
@@ -10,24 +10,17 @@ declare c cursor for select f from t3 order by f desc limit 2;
 open c;
 fetch c into y;
 fetch c into x;
-close c;
 insert into t3 values (x+y);
 call fib(n-1);
+## Close the cursor AFTER the recursion to ensure that the stack
+## frame is somewhat intact.
+close c;
 end;
 end if;
 end|
 set @@max_sp_recursion_depth= 20|
 insert into t3 values (0), (1)|
-call fib(3)|
-select * from t3 order by f asc|
-f
-0
-1
-1
-2
-delete from t3|
-insert into t3 values (0), (1)|
-call fib(10)|
+call fib(4)|
 select * from t3 order by f asc|
 f
 0
@@ -35,12 +28,6 @@ f
 1
 2
 3
-5
-8
-13
-21
-34
-55
 drop table t3|
 drop procedure fib|
 set @@max_sp_recursion_depth= 0|
diff --git a/mysql-test/t/sp-fib.test b/mysql-test/t/sp-fib.test
index e6682395a2cf9df5f8677af0d0bbc81e36c50408..24a51b99c2d5d0c12ffaf53fecf3d0c1735b62d7 100644
--- a/mysql-test/t/sp-fib.test
+++ b/mysql-test/t/sp-fib.test
@@ -22,13 +22,14 @@ begin
     begin
       declare x, y bigint unsigned;
       declare c cursor for select f from t3 order by f desc limit 2;
-
       open c;
       fetch c into y;
       fetch c into x;
-      close c;
       insert into t3 values (x+y);
       call fib(n-1);
+      ## Close the cursor AFTER the recursion to ensure that the stack
+      ## frame is somewhat intact.
+      close c;
     end;
   end if;
 end|
@@ -36,24 +37,17 @@ end|
 # Enable recursion
 set @@max_sp_recursion_depth= 20|
 
-# Minimum test: recursion of 3 levels
-
 insert into t3 values (0), (1)|
 
-call fib(3)|
+# The small number of recursion levels is intentional.
+# We need to avoid
+# Bug#15866 main.sp fails (thread stack limit
+#           insufficient for recursive call "fib(20)")
+# which affects some platforms.
+call fib(4)|
 
 select * from t3 order by f asc|
 
-delete from t3|
-
-# The original test, 20 levels, ran into memory limits on some machines
-# and builds. Try 10 instead...
-
-insert into t3 values (0), (1)|
-
-call fib(10)|
-
-select * from t3 order by f asc|
 drop table t3|
 drop procedure fib|
 set @@max_sp_recursion_depth= 0|