diff -Naurd mpfr-4.1.0-a/PATCHES mpfr-4.1.0-b/PATCHES
--- mpfr-4.1.0-a/PATCHES	2021-02-11 12:52:52.519350662 +0000
+++ mpfr-4.1.0-b/PATCHES	2021-02-11 12:52:52.563350183 +0000
@@ -0,0 +1 @@
+digamma-interm-zero
diff -Naurd mpfr-4.1.0-a/VERSION mpfr-4.1.0-b/VERSION
--- mpfr-4.1.0-a/VERSION	2021-02-11 12:50:22.424987002 +0000
+++ mpfr-4.1.0-b/VERSION	2021-02-11 12:52:52.563350183 +0000
@@ -1 +1 @@
-4.1.0-p5
+4.1.0-p6
diff -Naurd mpfr-4.1.0-a/src/digamma.c mpfr-4.1.0-b/src/digamma.c
--- mpfr-4.1.0-a/src/digamma.c	2021-02-11 12:50:22.412987133 +0000
+++ mpfr-4.1.0-b/src/digamma.c	2021-02-11 12:52:52.547350357 +0000
@@ -296,21 +296,26 @@
       errt = mpfr_digamma_approx (t, x_plus_j);
       expt = MPFR_GET_EXP (t);
       mpfr_sub (t, t, u, MPFR_RNDN);
-      if (MPFR_GET_EXP (t) < expt)
-        errt += expt - MPFR_EXP(t);
-      /* Warning: if u is zero (which happens when x_plus_j >= min at the
-         beginning of the while loop above), EXP(u) is not defined.
-         In this case we have no error from u. */
-      if (MPFR_NOTZERO(u) && MPFR_GET_EXP (t) < MPFR_GET_EXP (u))
-        erru += MPFR_EXP(u) - MPFR_EXP(t);
-      if (errt > erru)
-        errt = errt + 1;
-      else if (errt == erru)
-        errt = errt + 2;
-      else
-        errt = erru + 1;
-      if (MPFR_CAN_ROUND (t, p - errt, MPFR_PREC(y), rnd_mode))
-        break;
+      /* Warning! t may be zero (more likely in small precision). Note
+         that in this case, this is an exact zero, not an underflow. */
+      if (MPFR_NOTZERO(t))
+        {
+          if (MPFR_GET_EXP (t) < expt)
+            errt += expt - MPFR_EXP(t);
+          /* Warning: if u is zero (which happens when x_plus_j >= min at the
+             beginning of the while loop above), EXP(u) is not defined.
+             In this case we have no error from u. */
+          if (MPFR_NOTZERO(u) && MPFR_GET_EXP (t) < MPFR_GET_EXP (u))
+            erru += MPFR_EXP(u) - MPFR_EXP(t);
+          if (errt > erru)
+            errt = errt + 1;
+          else if (errt == erru)
+            errt = errt + 2;
+          else
+            errt = erru + 1;
+          if (MPFR_CAN_ROUND (t, p - errt, MPFR_PREC(y), rnd_mode))
+            break;
+        }
       MPFR_ZIV_NEXT (loop, p);
       mpfr_set_prec (t, p);
       mpfr_set_prec (u, p);
diff -Naurd mpfr-4.1.0-a/src/mpfr.h mpfr-4.1.0-b/src/mpfr.h
--- mpfr-4.1.0-a/src/mpfr.h	2021-02-11 12:50:22.424987002 +0000
+++ mpfr-4.1.0-b/src/mpfr.h	2021-02-11 12:52:52.559350226 +0000
@@ -27,7 +27,7 @@
 #define MPFR_VERSION_MAJOR 4
 #define MPFR_VERSION_MINOR 1
 #define MPFR_VERSION_PATCHLEVEL 0
-#define MPFR_VERSION_STRING "4.1.0-p5"
+#define MPFR_VERSION_STRING "4.1.0-p6"
 
 /* User macros:
    MPFR_USE_FILE:        Define it to make MPFR define functions dealing
diff -Naurd mpfr-4.1.0-a/src/version.c mpfr-4.1.0-b/src/version.c
--- mpfr-4.1.0-a/src/version.c	2021-02-11 12:50:22.424987002 +0000
+++ mpfr-4.1.0-b/src/version.c	2021-02-11 12:52:52.559350226 +0000
@@ -25,5 +25,5 @@
 const char *
 mpfr_get_version (void)
 {
-  return "4.1.0-p5";
+  return "4.1.0-p6";
 }
diff -Naurd mpfr-4.1.0-a/tests/tdigamma.c mpfr-4.1.0-b/tests/tdigamma.c
--- mpfr-4.1.0-a/tests/tdigamma.c	2021-02-11 12:50:22.412987133 +0000
+++ mpfr-4.1.0-b/tests/tdigamma.c	2021-02-11 12:52:52.547350357 +0000
@@ -90,6 +90,26 @@
   set_emax (emax);
 }
 
+/* another test that fails with GMP_CHECK_RANDOMIZE=1612741376857003
+   on revision 14398 */
+static void
+bug20210208 (void)
+{
+  mpfr_t x, y;
+  int inex;
+
+  mpfr_init2 (x, 73);
+  mpfr_init2 (y, 1);
+  mpfr_set_str (x, "1.4613470547060071827450", 10, MPFR_RNDN);
+  mpfr_clear_flags ();
+  inex = mpfr_digamma (y, x, MPFR_RNDU);
+  MPFR_ASSERTN (mpfr_cmp_si_2exp (y, -1, -12) == 0);
+  MPFR_ASSERTN (inex > 0);
+  MPFR_ASSERTN (__gmpfr_flags == MPFR_FLAGS_INEXACT);
+  mpfr_clear (x);
+  mpfr_clear (y);
+}
+
 int
 main (int argc, char *argv[])
 {
@@ -97,6 +117,7 @@
 
   special ();
   bug20210206 ();
+  bug20210208 ();
 
   test_generic (MPFR_PREC_MIN, 200, 20);
 
