diff --git a/src/fiber.m b/src/fiber.m
index 76ea89344998b54adae588e2e5c11a8046c73c5d..0adcc4cfe55657a5abaa714acf3d6359d12f3fea 100644
--- a/src/fiber.m
+++ b/src/fiber.m
@@ -1023,6 +1023,9 @@ fiber_init(void)
 void
 fiber_free(void)
 {
-	fiber_destroy_all();
-	mh_i32ptr_destroy(fibers_registry);
+	/* Only clean up if initialized. */
+	if (fibers_registry) {
+		fiber_destroy_all();
+		mh_i32ptr_destroy(fibers_registry);
+	}
 }