diff --git a/src/datastructures.c b/src/datastructures.c
index 271f4c6f64770f233e6d6207f06f93d1fbce0564..d5123fd64851bfdbf1bdeab39b4f2077e599b7dd 100644
--- a/src/datastructures.c
+++ b/src/datastructures.c
@@ -145,12 +145,14 @@ void h_hashtable_put(HHashTable* ht, const void* key, void* value) {
 
   HHashTableEntry *hte = &ht->contents[hashval & (ht->capacity - 1)];
   if (hte->key != NULL) {
-    do {
+    for(;;) {
+      // check each link, stay on last if not found
       if (hte->hashval == hashval && ht->equalFunc(key, hte->key))
 	goto insert_here;
-      if (hte->next != NULL)
-	hte = hte->next;
-    } while (hte->next != NULL);
+      if (hte->next == NULL)
+        break;
+      hte = hte->next;
+    }
     // Add a new link...
     assert (hte->next == NULL);
     hte->next = h_arena_malloc(ht->arena, sizeof(HHashTableEntry));