Author: axeld Date: 2010-01-03 19:54:52 +0100 (Sun, 03 Jan 2010) New Revision: 34876 Changeset: http://dev.haiku-os.org/changeset/34876/haiku Modified: haiku/trunk/src/system/kernel/kernel_daemon.cpp Log: * Solved the problem independently from the list. Modified: haiku/trunk/src/system/kernel/kernel_daemon.cpp =================================================================== --- haiku/trunk/src/system/kernel/kernel_daemon.cpp 2010-01-03 18:24:27 UTC (rev 34875) +++ haiku/trunk/src/system/kernel/kernel_daemon.cpp 2010-01-03 18:54:52 UTC (rev 34876) @@ -174,19 +174,16 @@ { 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 @@ struct daemon marker; int32 iteration = 0; + marker.arg = NULL; + while (true) { RecursiveLocker locker(fLock);