Commit Graph

4297 Commits

Author SHA1 Message Date
John Firebaugh
eb52f86ee1 Fix an order-of-operations issue with tileLoadingCompleteCallback
==7466== Invalid read of size 8
==7466==    at 0x5F1D0B: mbgl::TransformState::getAngle() const (transform_state.cpp:159)
==7466==    by 0x700CD2: mbgl::Source::tileLoadingCompleteCallback(mbgl::TileID const&, mbgl::TransformState const&, bool) (source.cpp:574)

==7466==  Address 0xf1d1508 is 56 bytes inside a block of size 120 free'd
==7466==    at 0x4C2A4BC: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7466==    by 0x70AD61: std::_Function_base::_Base_manager<std::_Bind<std::_Mem_fn<void (mbgl::Source::*)(mbgl::TileID const&, mbgl::TransformState const&, bool)> ()(mbgl::Source*, mbgl::TileID, mbgl::TransformState, bool)> >::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==7466==    by 0x7080EB: std::_Function_base::_Base_manager<std::_Bind<std::_Mem_fn<void (mbgl::Source::*)(mbgl::TileID const&, mbgl::TransformState const&, bool)> ()(mbgl::Source*, mbgl::TileID, mbgl::TransformState, bool)> >::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==7466==    by 0x535033: _ZNSt8functionIFvvEEaSEDn (functional:2277)
==7466==    by 0x56A3F5: mbgl::WorkTask::cancel() (work_task.cpp:34)
==7466==    by 0x56146C: mbgl::WorkRequest::~WorkRequest() (work_request.cpp:13)
==7466==    by 0x50C5E0: std::default_delete<mbgl::WorkRequest>::operator()(mbgl::WorkRequest*) const (unique_ptr.h:76)
==7466==    by 0x50C411: std::unique_ptr<mbgl::WorkRequest, std::default_delete<mbgl::WorkRequest> >::reset(mbgl::WorkRequest*) (unique_ptr.h:344)
==7466==    by 0x50C374: std::unique_ptr<mbgl::WorkRequest, std::default_delete<mbgl::WorkRequest> >::operator=(std::unique_ptr<mbgl::WorkRequest, std::default_delete<mbgl::WorkRequest> >&&) (unique_ptr.h:251)
==7466==    by 0x743136: mbgl::TileData::reparse(mbgl::Worker&, std::function<void ()()>) (tile_data.cpp:89)
==7466==    by 0x6FEA7C: mbgl::Source::handlePartialTile(mbgl::TileID const&, mbgl::Worker&) (source.cpp:250)
==7466==    by 0x700338: mbgl::Source::update(mbgl::MapData&, mbgl::TransformState const&, mbgl::Style&, mbgl::GlyphAtlas&, mbgl::GlyphStore&, mbgl::SpriteAtlas&, mbgl::util::ptr<mbgl::Sprite>, mbgl::TexturePool&, bool) (source.cpp:438)
==7466==    by 0x68C1A5: mbgl::Style::update(mbgl::MapData&, mbgl::TransformState const&, mbgl::TexturePool&) (style.cpp:82)
==7466==    by 0x548F5C: (anonymous namespace)::MockMapContext::update() (resource_loading.cpp:51)
==7466==    by 0x548FA3: (anonymous namespace)::MockMapContext::onTileDataChanged() (resource_loading.cpp:56)
==7466==    by 0x68CDE4: mbgl::Style::emitTileDataChanged() (style.cpp:212)
==7466==    by 0x68CBDB: mbgl::Style::onTileLoaded(bool) (style.cpp:191)
==7466==    by 0x700F38: mbgl::Source::emitTileLoaded(bool) (source.cpp:595)
==7466==    by 0x700CA2: mbgl::Source::tileLoadingCompleteCallback(mbgl::TileID const&, mbgl::TransformState const&, bool) (source.cpp:573)

The invalid `TransformState::getAngle()` read comes from the following: the
storage for `TransformState` is the [bound parameter in this
callback](https://github.com/mapbox/mapbox-gl-native/blob/5e0775d276f9ea3652bae1
23c4e85cc05ae13bd5/src/mbgl/map/source.cpp#L292-292). The callback itself is
copied into various lambda bindings and eventually winds up as the [after
callback](https://github.com/mapbox/mapbox-gl-native/blob/5e0775d276f9ea3652bae1
23c4e85cc05ae13bd5/src/mbgl/map/tile_data.cpp#L89-89) for the worker task.

On the way out, `tileLoadingCompleteCallback` gets called via this callback
binding. It first does `emitTileLoaded`, which happens to cause [a _new_ work
request to be
queued](https://github.com/mapbox/mapbox-gl-native/blob/5e0775d276f9ea3652bae123
c4e85cc05ae13bd5/src/mbgl/map/source.cpp#L250-250). This cancels the
in-progress work request, [by nulling-out the `after`
callback](https://github.com/mapbox/mapbox-gl-native/blob/5e0775d276f9ea3652bae1
23c4e85cc05ae13bd5/src/mbgl/util/work_task.cpp#L34-34). But in fact, the after
callback is still executing. The next thing it does is [call
transformState.getAngle()](https://github.com/mapbox/mapbox-gl-native/blob/5e077
5d276f9ea3652bae123c4e85cc05ae13bd5/src/mbgl/map/source.cpp#L574), but the
transformState is now gone.
2015-06-18 13:39:18 +03:00
John Firebaugh
3ef8d8728e Don't abandon a null texture 2015-06-18 13:39:18 +03:00
John Firebaugh
0cce08b67b Change StyleBucket::source to indirect reference
This eliminates a reference loop: VectorTileData holds StyleLayers which
hold StyleBuckets which held Sources which hold VectorTileDatas. This
breaks the StyleBucket -> Source link in favor of manually resolving the
reference where necessary.
2015-06-18 13:39:18 +03:00
Thiago Marcos P. Santos
044454417b Do not hold a reference to the Style at the [Live|Vector]TileData
Layers are added and removed dynamically on the Map thread when we use shape
annotations and we are iterating style.layers on the Worker thread without
any lock.

Now when we create a [Live|Vector]TileData at the Map thread we give it
a layers list (instead of the Style) and [Live|Vector]TileData will ultimately
make a copy of this list (on the Map thread, so no concurrency with
adding shape annotations).

The copy should be relatively cheap because we are using a shared pointer
for storing the layers on the list.
2015-06-18 13:39:18 +03:00
Thiago Marcos P. Santos
1f12bcee90 Support shape annotations on GLFWView
Add different random triangles count by using the keys 7, 8, 9 or 0.
Q will clear all the annotations.
W will remove one annotation.
2015-06-18 13:39:18 +03:00
Bruno de Oliveira Abinader
ff0e54f35a Cleaned up #defines for BUFFER_OFFSET 2015-06-18 09:48:34 +03:00
Justin R. Miller
6fba1464e3 Merge pull request #1748 from mapbox/1ec5-null-change
Avoid null-change KVO notifications
2015-06-17 21:37:21 -07:00
Minh Nguyễn
bf6a100801 Avoid null-change KVO notifications
If no access token is set in the Info.plist, avoid triggering a KVO notification about the access token changing. By the same token (heh), avoid pulling a C string out of the change dictionary if the access token is being nilled out.
2015-06-17 16:49:12 -07:00
Justin R. Miller
dcbb5b2e4e manually handle GeoJSONVT for OS X 2015-06-17 15:52:00 -07:00
Minh Nguyễn
91641ffb01 Lightweight generics
Added lightweight generics annotations to collection-typed method and protocol signatures to streamline usage of these members in Swift. Lightweight generic type specifiers are wrapped in conditionally-compiled macros for compatibility with Xcode 6.x.

Manually preprocess the NS_*_OF() macros in a temporary copy of each header before appledoc sees the headers. Also removed the --ignore flag because we no longer have a private headers folder under include/mbgl/ios/.
2015-06-17 15:33:00 -07:00
Justin R. Miller
73737445ec fixes #1650: default to no symbols for release builds, but build both 2015-06-17 12:48:11 -07:00
Minh Nguyễn
0686807a21 Audited shape annotation classes for nullability
Audited various classes to match MapKit. Also, `-[MGLAnnotation title]` is nullable because titles are optional for shape annotations.
2015-06-16 16:32:57 -07:00
Minh Nguyễn
416928f824 Defer to MGLMultiPoint for overlayBounds implementation
Fixes #1730.
2015-06-16 11:06:46 -07:00
Minh Nguyễn
df6ab1dc00 Corrected bundledStyleURLs doc comment
Per f46328655e (commitcomment-11695358).
2015-06-16 09:45:10 -07:00
Thiago Marcos P. Santos
4623baa1a5 Add tests for renderStill() misuse 2015-06-16 14:09:51 +03:00
Thiago Marcos P. Santos
57c34747a2 Report errors for renderStill() misuse using the callback
Use the callback provided for reporting the errors instead of throwing
an exception. The problem with the exception is it will happen on the
Map thread which makes it impossible to the user of our API to catch,
ultimately resulting in a crash.

In the scenario of not providing a callback, we just print an error.
2015-06-16 14:06:29 +03:00
Justin R. Miller
556938e8bb [publish ios-v0.3.5] 2015-06-15 22:20:52 -07:00
Justin R. Miller
d9f09596fb bump podspec version 2015-06-15 22:20:16 -07:00
Justin R. Miller
8dbf2bf8da refs #1483: move to simple tagging scheme, but preserve platform in publish command 2015-06-15 22:19:34 -07:00
Justin R. Miller
bd0bf294bf squash of #1655: shape annotations support for core & iOS 2015-06-15 18:30:39 -07:00
Jason Wray
e75e538ddb Add location tests for iOS
- Adds testDelegatesStartStopLocatingUser: Tests mapViewWillStartLocatingUser and mapViewDidStopLocatingUser delegate methods
- Adds testUserTrackingModeFollow
- Adds testUserTrackingModeFollowWithHeading (disabled because of library bug)

Fakes user location via swizzled CLLocationManager and hard-coded mock coordinates and heading.
2015-06-15 16:42:32 -07:00
John Firebaugh
69cf6ed3d2 Reenable iOS tests, default hardware/iOS version only for now
Use of the -destination argument to either xcodebuild or xctool
fails on Travis.

Refs #1452
2015-06-15 16:12:14 -07:00
Minh Nguyễn
714b68f7b3 Revert "use array of structs rather than parallel arrays for annotations"
This reverts commit 2435c1ad26 (#1710), which needs to be revisited in light of #1655, which is a much higher priority at the moment.
2015-06-15 15:58:22 -07:00
Justin R. Miller
a08bcb6d0e update README for debug info on test app 2015-06-15 14:35:57 -07:00
hanchao
b8c251592a fix roundabout not closed #1450 2015-06-14 07:56:31 +02:00
Minh Nguyễn
450a6beae0 Restored nullability compatibility shim
This reverts commit a425df0f95f5f0088444b8ebc67708756ff962aa for compatibility with Xcode 6.1.
2015-06-13 19:58:59 -07:00
Minh Nguyễn
4176d21d1c Namespaced reachability notification constant
Fixes #1717.
2015-06-12 11:54:46 -07:00
Ansis Brammanis
7dc880080e update test suite to reenable symbol tests 2015-06-11 18:48:07 -04:00
Konstantin Käfer
2435c1ad26 use array of structs rather than parallel arrays for annotations 2015-06-11 17:26:37 -04:00
Minh Nguyễn
f46328655e Audited headers for nullability
Added some nullability qualifiers in method implementation selectors for consistency with declarations.

The user dot view now has a non-zero size. Previously only its layer was sized properly. Also resolved some pedantic warnings about missing designated initializer overrides.

Xcode 6.3 or above is now required for building this project.
2015-06-11 11:37:23 -07:00
Ansis Brammanis
cfee5aa8ef fix text-letter-spacing render test by using float 2015-06-09 11:07:17 -04:00
Konstantin Käfer
0c5f8a2c59 press 1 through 6 to add 10^(n-1) points in the current viewport
(only works correctly when rotated to north, but this is a just a debug functionality anyway)
2015-06-09 10:29:07 -04:00
Konstantin Käfer
f85889dc75 allow constructing LatLng/LatLngBounds objects from TileIDs 2015-06-08 16:13:37 -04:00
Justin R. Miller
5e661f7617 fix formatting 2015-06-07 17:31:28 -07:00
Thiago Marcos P. Santos
967fc73c15 Add documentation for TileData::State 2015-06-05 17:47:57 +03:00
John Firebaugh
a0503f3f5b Remove unused overscaling variables 2015-06-04 14:09:05 -07:00
Justin R. Miller
409cd1651f [publish ios-v0.3.4] 2015-06-04 14:01:15 -07:00
Justin R. Miller
9d8aae140c going back to b1 styles pin to avoid other complications for now 2015-06-04 14:00:52 -07:00
Justin R. Miller
ddcb01deb6 [publish ios-v0.3.4] 2015-06-04 13:45:11 -07:00
Justin R. Miller
d0c77aa73c bump podspec to 0.3.4 2015-06-04 13:44:42 -07:00
Justin R. Miller
012f5b43bd bump/correct styles pin 2015-06-04 13:44:42 -07:00
Thiago Marcos P. Santos
14083700e5 Test Map object destruction with pending requests
Test whenever destroying a Map object with requests pending
works and is done quickly.

The test injects artificial delays in selected requests and
tries to destroy the Map object afterwards.

Currently glyph requests are skipped because there is a bug
being worked on in a different issue.
2015-06-04 14:44:34 +03:00
Thiago Marcos P. Santos
b09df7acb5 Cleanup the MapContext before the util::Thread destructor
The util::Thread will call the stop() method of the MapContext's RunLoop
which will wait for the pending tasks tied to it to complete.

If we have a request that is timeout'ing, this could mean a really long
wait. Instead, we now send a cleanup message that will reset all the
attributes first (canceling the pending requests) so the the MapContext
gets destructed quickly.
2015-06-04 14:44:34 +03:00
Thiago Marcos P. Santos
29b8b44b77 Fix race condition on error notification
We start loading the resources at the moment we set the style, but we
set the callback for error notification at renderStill(), which happen
afterwards.

If some error occurs in this short window, it was never being notified.
Now we save the last error and we check after we set the callback.
2015-06-04 14:44:34 +03:00
Justin R. Miller
9b36b48268 [publish ios-v0.3.3] 2015-06-03 20:51:19 -07:00
Justin R. Miller
8fdb389574 bump podspec to 0.3.3 2015-06-03 20:50:49 -07:00
Ansis Brammanis
9c03b396c0 Merge remote-tracking branch 'origin/master' into HEAD
Conflicts:
	src/mbgl/renderer/painter_fill.cpp
2015-06-03 19:20:41 -04:00
Ansis Brammanis
2bd7e45502 fix collision box clipping
and name parameters when it's not clear from their type
2015-06-03 19:17:49 -04:00
Brad Leege
295dc73c1a Adding iOS Testing Header To Draw Attention 2015-06-03 11:57:49 -05:00
Justin R. Miller
ce457dafb8 fix typo 2015-06-03 09:37:43 -07:00