diff --git a/src/box/gc.c b/src/box/gc.c
index 9ebe28421b49d347d9154fda9631791cd359ebfb..a9008bff45d1e5f0ba81c0e1793f06aa792f94ad 100644
--- a/src/box/gc.c
+++ b/src/box/gc.c
@@ -573,12 +573,6 @@ gc_checkpoint_fiber_f(va_list ap)
 {
 	(void)ap;
 
-	/*
-	 * Make the fiber non-cancellable so as not to bother
-	 * about spurious wakeups.
-	 */
-	fiber_set_cancellable(false);
-
 	struct checkpoint_schedule *sched = &gc.checkpoint_schedule;
 	while (!fiber_is_cancelled()) {
 		double timeout = checkpoint_schedule_timeout(sched,
@@ -597,7 +591,8 @@ gc_checkpoint_fiber_f(va_list ap)
 		if (!fiber_yield_timeout(timeout) &&
 		    !gc.checkpoint_is_pending) {
 			/*
-			 * The checkpoint schedule has changed.
+			 * The checkpoint schedule has changed or the fiber has
+			 * been woken up spuriously.
 			 * Reschedule the next checkpoint.
 			 */
 			continue;