Opened 5 years ago
Closed 5 years ago
Last modified 4 years ago
#13621 closed Bug Report - General (fixed)
Convert from Qt foreach() macro to standard C++ range-for.
Reported by: | David Hampton | Owned by: | David Hampton |
---|---|---|---|
Priority: | major | Milestone: | 32.0 |
Component: | MythTV - General | Version: | Master Head |
Severity: | medium | Keywords: | |
Cc: | Ticket locked: | no |
Description
The use of foreach has caused some unexpected problems in the scheduler, which were chased down to containers detaching in the call to get the last item of the range. This detach guarantees that the current iterator is now invalid and the operation will eventually run off the end of the range.
The Qt company is also planning to remove the foreach/Q_FOREACH macro in an (as yet unspecified) upcoming release.
Replace all instances of the foreach macro with a standard C++ range-for iteration, and (in almost all cases) use the qAsConst macro mark to the ranges as constant to prevent detaching of the data. There are a couple of places where adding the qAsConst macro throws a compiler error, so omit qAsConst in those instances. These cases all appear to occur with temporary lists, and this behavior is intentional on Qt's part (see https://doc.qt.io/qt-5/qtglobal.html#qAsConst-1).