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:
@@ -116,14 +116,13 @@ void
|
|||||||
PendingNodeMonitorCache::PoseCreatedOrMoved(BPoseView *poseView, const BPose *pose)
|
PendingNodeMonitorCache::PoseCreatedOrMoved(BPoseView *poseView, const BPose *pose)
|
||||||
{
|
{
|
||||||
bigtime_t now = system_time();
|
bigtime_t now = system_time();
|
||||||
int32 count = fList.CountItems();
|
for (int32 index = 0; index < fList.CountItems();) {
|
||||||
for (int32 index = 0; index < count;) {
|
|
||||||
PendingNodeMonitorEntry *item = fList.ItemAt(index);
|
PendingNodeMonitorEntry *item = fList.ItemAt(index);
|
||||||
if (item->TooOld(now)) {
|
if (item->TooOld(now)) {
|
||||||
PRINT(("removing old entry from pending node monitor cache\n"));
|
PRINT(("removing old entry from pending node monitor cache\n"));
|
||||||
delete fList.RemoveItemAt(index);
|
delete fList.RemoveItemAt(index);
|
||||||
count--;
|
|
||||||
} else if (item->Match(pose->TargetModel()->NodeRef())) {
|
} else if (item->Match(pose->TargetModel()->NodeRef())) {
|
||||||
|
fList.RemoveItemAt(index);
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
PRINT(("reapplying node monitor for model:\n"));
|
PRINT(("reapplying node monitor for model:\n"));
|
||||||
pose->TargetModel()->PrintToStream();
|
pose->TargetModel()->PrintToStream();
|
||||||
@@ -132,8 +131,7 @@ PendingNodeMonitorCache::PoseCreatedOrMoved(BPoseView *poseView, const BPose *po
|
|||||||
#endif
|
#endif
|
||||||
poseView->FSNotification(item->NodeMonitor());
|
poseView->FSNotification(item->NodeMonitor());
|
||||||
ASSERT(result);
|
ASSERT(result);
|
||||||
delete fList.RemoveItemAt(index);
|
delete item;
|
||||||
count--;
|
|
||||||
} else
|
} else
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user