diff --git a/src/system/kernel/kernel_daemon.cpp b/src/system/kernel/kernel_daemon.cpp index 833daadce2..9c1509e3d9 100644 --- a/src/system/kernel/kernel_daemon.cpp +++ b/src/system/kernel/kernel_daemon.cpp @@ -174,19 +174,16 @@ KernelDaemon::_NextDaemon(struct daemon& marker) { struct daemon* daemon; - if (marker.GetDoublyLinkedListLink()->next == NULL - && marker.GetDoublyLinkedListLink()->previous == NULL - && fDaemons.Head() != &marker) { - // Marker is not part of the list yet, just return the first entry + if (marker.arg == NULL) { + // The marker is not part of the list yet, just return the first entry daemon = fDaemons.Head(); } else { daemon = marker.GetDoublyLinkedListLink()->next; fDaemons.Remove(&marker); - - marker.GetDoublyLinkedListLink()->next = NULL; - marker.GetDoublyLinkedListLink()->previous = NULL; } + marker.arg = daemon; + if (daemon != NULL) fDaemons.Insert(daemon->GetDoublyLinkedListLink()->next, &marker); @@ -200,6 +197,8 @@ KernelDaemon::_DaemonThread() struct daemon marker; int32 iteration = 0; + marker.arg = NULL; + while (true) { RecursiveLocker locker(fLock);