-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://codereview.secondlife.com/r/24/
-----------------------------------------------------------
(Updated 2010-12-16 11:06:44.936367)
Review request for Viewer.
Changes
-------
Added comments.
I'm wondering if there is still a reason for the deadlist_t related code now?
If that was "inlined" into the loop it would become:
while (oi != end)
{
// increment the loop iterator now since it may become invalid
below
observer_multimap_t::iterator cur_oi = oi++;
LLRemoteParcelInfoObserver * observer = cur_oi->second.get();
if(observer)
{
// may invalidate cur_oi if the observer removes itself
observer->processParcelInfo(parcel_data);
}
else
{
// the handle points to an expired observer, so don't
keep it
// around anymore (invalidates cur_oi)
observers.erase(cur_oi);
}
}
That might decrease the chance of the fix being reverted since even if the
comment on "processParcelInfo" is missed, then "observers.erase()" would still
make the need for two iterators ("oi" and "cur_oi") clear?
Summary
-------
erase() on a multimap will only invalidate iterators that point to the element
being erased so pre-incrementing the loop iterator should prevent it from
getting invalidated when an observer calls removeObserver() as part of its
processParcelInfo() implementation.
This addresses bug VWR-24207.
http://jira.secondlife.com/browse/VWR-24207
Diffs (updated)
-----
indra/newview/llremoteparcelrequest.cpp UNKNOWN
Diff: http://codereview.secondlife.com/r/24/diff
Testing
-------
Thanks,
Kitty
_______________________________________________
Policies and (un)subscribe information available here:
http://wiki.secondlife.com/wiki/OpenSource-Dev
Please read the policies before posting to keep unmoderated posting privileges