* 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:
@@ -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);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user