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)
|
||||
{
|
||||
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++;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user