* Solved the problem independently from the list.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34876 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2010-01-03 18:54:52 +00:00
parent 32883e8980
commit e045a8c0df
+6 -7
View File
@@ -174,19 +174,16 @@ KernelDaemon::_NextDaemon(struct daemon& marker)
{ {
struct daemon* daemon; struct daemon* daemon;
if (marker.GetDoublyLinkedListLink()->next == NULL if (marker.arg == NULL) {
&& marker.GetDoublyLinkedListLink()->previous == NULL // The marker is not part of the list yet, just return the first entry
&& fDaemons.Head() != &marker) {
// Marker is not part of the list yet, just return the first entry
daemon = fDaemons.Head(); daemon = fDaemons.Head();
} else { } else {
daemon = marker.GetDoublyLinkedListLink()->next; daemon = marker.GetDoublyLinkedListLink()->next;
fDaemons.Remove(&marker); fDaemons.Remove(&marker);
marker.GetDoublyLinkedListLink()->next = NULL;
marker.GetDoublyLinkedListLink()->previous = NULL;
} }
marker.arg = daemon;
if (daemon != NULL) if (daemon != NULL)
fDaemons.Insert(daemon->GetDoublyLinkedListLink()->next, &marker); fDaemons.Insert(daemon->GetDoublyLinkedListLink()->next, &marker);
@@ -200,6 +197,8 @@ KernelDaemon::_DaemonThread()
struct daemon marker; struct daemon marker;
int32 iteration = 0; int32 iteration = 0;
marker.arg = NULL;
while (true) { while (true) {
RecursiveLocker locker(fLock); RecursiveLocker locker(fLock);