When opening many maps and sharing the same filesource:
- Say we open around 30 maps and they all have the same style.
- They will all request the same sprite.json, but Qt filesource will
restrict simultaneous request to 20.
- Mapbox GL will send some sprite.json to the filesource and queue
some internally along with other requests.
- When the first sprite.json arrives and the Qt filesource calls the
callback, Mapbox GL will synchronously push queued requests to the
Qt filesource when a request is handled.
- We are walking a QVector dispatching sprite.json requests, but more
requests get added to this QVector while we are walking it using an
iterator.
- That corrupts the iterator and we get a crash.
The fix is simple, just pop items from the QVector until it is empty
instead of using iterators.
Qt macOS network manage implementation differs from linux in a sense
that some requests do not generate a finished() signal, but a error()
instead - that is not caught up by the network access manager. This
made QMapboxGL.styleURL utest hang for macOS.