diff --git a/src/jtag/core.c b/src/jtag/core.c
index a8d65f1e59000ddf21d42a1f9a0fad55a41cf706..aaa7da1f982655bf91849ffe59b4121f43f5803c 100644
--- a/src/jtag/core.c
+++ b/src/jtag/core.c
@@ -282,8 +282,12 @@ int jtag_call_event_callbacks(enum jtag_event event)
 
 	while (callback)
 	{
+		jtag_event_callback_t *next;
+
+		/* callback may remove itself */
+		next = callback->next;
 		callback->callback(event, callback->priv);
-		callback = callback->next;
+		callback = next;
 	}
 
 	return ERROR_OK;