diff --git a/linux-ramdump-parser-v2/parsers/workqueue.py b/linux-ramdump-parser-v2/parsers/workqueue.py
index 4986299c444c8221b6028f98158263463098db68..183cb03d8747cd81ffae305c313fd988e8bd5ac8 100644
--- a/linux-ramdump-parser-v2/parsers/workqueue.py
+++ b/linux-ramdump-parser-v2/parsers/workqueue.py
@@ -269,6 +269,7 @@ class Workqueues(RamParser):
                             break
 
             worker_pool = workqueue_i + pools_offset
+            seen = []
             # Need better way to ge the number of pools...
             for k in range(0, 2):
                 worker_pool_i = worker_pool + k * worker_pool_size
@@ -279,9 +280,11 @@ class Workqueues(RamParser):
                     worker_addr = next_entry - worker_entry_offset
                     worker_task_addr = ram_dump.read_word(
                         next_entry - worker_entry_offset + worker_task_offset)
-                    if worker_task_addr is None or worker_task_addr == 0:
+                    if worker_task_addr is None or worker_task_addr == 0 or worker_task_addr in seen:
                         break
 
+                    seen.append(worker_task_addr)
+
                     taskname = ram_dump.read_cstring(
                         (worker_task_addr + offset_comm), 16)
                     scheduled_addr = ram_dump.read_word(
@@ -420,13 +423,16 @@ class Workqueues(RamParser):
 
                 idle_list_addr = worker_pool_i + pool_idle_offset
                 next_entry = ram_dump.read_word(idle_list_addr)
+                seen = []
                 while True:
                     worker_addr = next_entry - worker_entry_offset
                     worker_task_addr = ram_dump.read_word(
                         next_entry - worker_entry_offset + worker_task_offset)
-                    if worker_task_addr is None or worker_task_addr == 0:
+                    if worker_task_addr is None or worker_task_addr == 0 or worker_task_addr in seen:
                         break
 
+                    seen.append(worker_task_addr)
+
                     taskname = ram_dump.read_cstring(
                         (worker_task_addr + offset_comm), 16)
                     scheduled_addr = ram_dump.read_word(