diff --git a/src/cyclic.c b/src/cyclic.c
index cb8a7395a25d5a26914efeb647a2cc8732808403..67066114e6753df38fb776b9c82e11f7c341e411 100644
--- a/src/cyclic.c
+++ b/src/cyclic.c
@@ -4,7 +4,7 @@
 
 CYCLIC *cyclic_hash[CYCLIC_HASH_SIZE];
 
-void unlink_cyclic(CYCLIC *c)
+static void low_unlink_cyclic(CYCLIC *c)
 {
   unsigned int h;
   CYCLIC **p;
@@ -23,13 +23,18 @@ void unlink_cyclic(CYCLIC *c)
     if(c == *p)
     {
       *p=c->next;
-      UNSET_ONERROR(c->onerr);
       return;
     }
   }
   fatal("Unlink cyclic on lost cyclic struct.\n");
 }
 
+void unlink_cyclic(CYCLIC *c)
+{
+  UNSET_ONERROR(c->onerr);
+  low_unlink_cyclic(c);
+}
+
 void *begin_cyclic(CYCLIC *c,
 		   void *id,
 		   void *th,
@@ -60,6 +65,6 @@ void *begin_cyclic(CYCLIC *c,
   c->th=th;
   c->next=cyclic_hash[h];
   cyclic_hash[h]=c;
-  SET_ONERROR(c->onerr, unlink_cyclic, &c);
+  SET_ONERROR(c->onerr, low_unlink_cyclic, c);
   return 0;
 }