Remove the monitor item before calling FSNotification() on it. Otherwise,

in some cases PoseView would call back into PoseCreatedOrMoved(), leading
to an infinite recursion.

Fixes #7696.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42229 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Rene Gollent
2011-06-18 03:22:31 +00:00
parent bbfcd83bde
commit f4d44cd47d
+3 -5
View File
@@ -116,14 +116,13 @@ void
PendingNodeMonitorCache::PoseCreatedOrMoved(BPoseView *poseView, const BPose *pose)
{
bigtime_t now = system_time();
int32 count = fList.CountItems();
for (int32 index = 0; index < count;) {
for (int32 index = 0; index < fList.CountItems();) {
PendingNodeMonitorEntry *item = fList.ItemAt(index);
if (item->TooOld(now)) {
PRINT(("removing old entry from pending node monitor cache\n"));
delete fList.RemoveItemAt(index);
count--;
} else if (item->Match(pose->TargetModel()->NodeRef())) {
fList.RemoveItemAt(index);
#if DEBUG
PRINT(("reapplying node monitor for model:\n"));
pose->TargetModel()->PrintToStream();
@@ -132,8 +131,7 @@ PendingNodeMonitorCache::PoseCreatedOrMoved(BPoseView *poseView, const BPose *po
#endif
poseView->FSNotification(item->NodeMonitor());
ASSERT(result);
delete fList.RemoveItemAt(index);
count--;
delete item;
} else
index++;
}