Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Visual test group-symbolizer-4.xml crashes with access violation on windows with mapnik 3.0.11 #3453

Closed
SNiLD opened this issue Jun 14, 2016 · 28 comments · Fixed by #3455
Closed
Labels

Comments

@SNiLD
Copy link

SNiLD commented Jun 14, 2016

Full stack trace:

>   mapnik.dll!std::_Container_base12::_Orphan_all() Line 222   C++
    mapnik.dll!std::_Vector_alloc<std::_Vec_base_types<std::pair<double,double>,std::allocator<std::pair<double,double> > > >::_Orphan_all() Line 617   C++
    mapnik.dll!std::_Vector_alloc<std::_Vec_base_types<std::pair<double,double>,std::allocator<std::pair<double,double> > > >::_Free_proxy() Line 593   C++
    mapnik.dll!std::_Vector_alloc<std::_Vec_base_types<std::pair<double,double>,std::allocator<std::pair<double,double> > > >::~_Vector_alloc<std::_Vec_base_types<std::pair<double,double>,std::allocator<std::pair<double,double> > > >() Line 557    C++
    mapnik.dll!std::vector<std::pair<double,double>,std::allocator<std::pair<double,double> > >::~vector<std::pair<double,double>,std::allocator<std::pair<double,double> > >() Line 980    C++
    mapnik.dll!mapnik::svg::path_attributes::~path_attributes() C++
    mapnik.dll!`eh vector destructor iterator'(void * ptr=0x0630eabc, unsigned int size=368, unsigned int count=63, void(*)(void *) destructor=0x54b85e7a)  C++
    mapnik.dll!mapnik::svg::path_attributes::`vector deleting destructor'(unsigned int) C++
    mapnik.dll!agg::pod_allocator<mapnik::svg::path_attributes>::deallocate(mapnik::svg::path_attributes * ptr=0x0630902c, unsigned int __formal=64) Line 41    C++
    mapnik.dll!agg::pod_bvector<mapnik::svg::path_attributes,6>::~pod_bvector<mapnik::svg::path_attributes,6>() Line 521    C++
    mapnik.dll!mapnik::detail::render_marker_symbolizer_visitor<mapnik::label_collision_detector4 &,mapnik::renderer_common,mapnik::markers_renderer_context>::operator()(const mapnik::marker_svg & mark={...}) Line 133   C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::detail::render_marker_symbolizer_visitor<mapnik::label_collision_detector4 &,mapnik::renderer_common,mapnik::markers_renderer_context> &,mapnik::marker,void,mapnik::marker_svg>::apply_const(const mapnik::marker & v={...}, mapnik::detail::render_marker_symbolizer_visitor<mapnik::label_collision_detector4 &,mapnik::renderer_common,mapnik::markers_renderer_context> & f={...}) Line 329    C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::detail::render_marker_symbolizer_visitor<mapnik::label_collision_detector4 &,mapnik::renderer_common,mapnik::markers_renderer_context> &,mapnik::marker,void,mapnik::marker_rgba8,mapnik::marker_svg>::apply_const(const mapnik::marker & v={...}, mapnik::detail::render_marker_symbolizer_visitor<mapnik::label_collision_detector4 &,mapnik::renderer_common,mapnik::markers_renderer_context> & f={...}) Line 306   C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::detail::render_marker_symbolizer_visitor<mapnik::label_collision_detector4 &,mapnik::renderer_common,mapnik::markers_renderer_context> &,mapnik::marker,void,mapnik::marker_null,mapnik::marker_rgba8,mapnik::marker_svg>::apply_const(const mapnik::marker & v={...}, mapnik::detail::render_marker_symbolizer_visitor<mapnik::label_collision_detector4 &,mapnik::renderer_common,mapnik::markers_renderer_context> & f={...}) Line 306   C++
    mapnik.dll!mapbox::util::variant<mapnik::marker_null,mapnik::marker_rgba8,mapnik::marker_svg>::visit<mapnik::detail::render_marker_symbolizer_visitor<mapnik::label_collision_detector4 &,mapnik::renderer_common,mapnik::markers_renderer_context> &,mapnik::marker,void>(const mapnik::marker & v={...}, mapnik::detail::render_marker_symbolizer_visitor<mapnik::label_collision_detector4 &,mapnik::renderer_common,mapnik::markers_renderer_context> & f={...}) Line 782   C++
    mapnik.dll!mapnik::util::apply_visitor<mapnik::detail::render_marker_symbolizer_visitor<mapnik::label_collision_detector4 &,mapnik::renderer_common,mapnik::markers_renderer_context> &,mapnik::marker>(mapnik::detail::render_marker_symbolizer_visitor<mapnik::label_collision_detector4 &,mapnik::renderer_common,mapnik::markers_renderer_context> & f={...}, const mapnik::marker & v={...}) Line 52   C++
    mapnik.dll!mapnik::render_markers_symbolizer(const mapnik::markers_symbolizer & sym={...}, mapnik::feature_impl & feature={...}, const mapnik::proj_transform & prj_trans={...}, const mapnik::renderer_common & common={...}, const mapnik::box2d<double> & clip_box={...}, mapnik::markers_renderer_context & renderer_context={...}) Line 295    C++
    mapnik.dll!mapnik::render_thunk_extractor::operator()(const mapnik::markers_symbolizer & sym={...}) Line 93 C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::render_thunk_extractor & f={...}) Line 302 C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::render_thunk_extractor & f={...}) Line 306 C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::render_thunk_extractor & f={...}) Line 306 C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::render_thunk_extractor & f={...}) Line 306   C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::render_thunk_extractor & f={...}) Line 306 C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::render_thunk_extractor & f={...}) Line 306  C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::render_thunk_extractor & f={...}) Line 306   C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::render_thunk_extractor & f={...}) Line 306   C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::render_thunk_extractor & f={...}) Line 306   C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::render_thunk_extractor & f={...}) Line 306  C++
    mapnik.dll!mapbox::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::visit<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void>(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::render_thunk_extractor & f={...}) Line 782  C++
    mapnik.dll!mapnik::util::apply_visitor<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> >(mapnik::render_thunk_extractor & f={...}, const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}) Line 52    C++
    mapnik.dll!mapnik::render_group_symbolizer(const mapnik::group_symbolizer & sym={...}, mapnik::feature_impl & feature={...}, const std::unordered_map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,mapnik::value_adl_barrier::value,std::hash<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::equal_to<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,mapnik::value_adl_barrier::value> > > & vars={...}, const mapnik::proj_transform & prj_trans={...}, const mapnik::box2d<double> & clipping_extent={...}, mapnik::renderer_common & common={...}, mapnik::render_thunk_list_dispatch & render_thunks={...}) Line 141  C++
    mapnik.dll!mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4>::process(const mapnik::group_symbolizer & sym={...}, mapnik::feature_impl & feature={...}, const mapnik::proj_transform & prj_trans={...}) Line 149   C++
    mapnik.dll!mapnik::process_impl<1>::process<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4>,mapnik::group_symbolizer,mapnik::feature_impl,mapnik::proj_transform>(mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> & ren={...}, const mapnik::group_symbolizer & sym={...}, mapnik::feature_impl & f={...}, const mapnik::proj_transform & tr={...}) Line 44   C++
    mapnik.dll!mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >::operator()<mapnik::group_symbolizer>(const mapnik::group_symbolizer & sym={...}) Line 82   C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 302 C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 306  C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 306  C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 306  C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 306    C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 306  C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 306   C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 306    C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 306    C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 306    C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 306   C++
    mapnik.dll!mapbox::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::visit<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void>(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 782   C++
    mapnik.dll!mapnik::util::apply_visitor<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> >(mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}, const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}) Line 52 C++
    mapnik.dll!mapnik::feature_style_processor<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >::render_style(mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> & p={...}, const mapnik::feature_type_style * style=0x00be36bc, const mapnik::rule_cache & rc={...}, std::shared_ptr<mapnik::Featureset> features={...}, const mapnik::proj_transform & prj_trans={...}) Line 595  C++
    mapnik.dll!mapnik::feature_style_processor<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >::render_material(const mapnik::layer_rendering_material & mat={...}, mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> & p={...}) Line 554 C++
    mapnik.dll!mapnik::feature_style_processor<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >::apply(double scale_denom=7951392.1995195420) Line 141  C++
    run_visual_test.exe!visual_tests::agg_renderer::render(const mapnik::Map & map={...}, double scale_factor=1.0000000000000000) Line 91   C++
    run_visual_test.exe!visual_tests::renderer<visual_tests::agg_renderer>::render(const mapnik::Map & map={...}, double scale_factor=1.0000000000000000) Line 243  C++
    run_visual_test.exe!visual_tests::renderer_visitor::render<visual_tests::renderer<visual_tests::agg_renderer>,0>(const visual_tests::renderer<visual_tests::agg_renderer> & renderer={...}) Line 103    C++
    run_visual_test.exe!visual_tests::renderer_visitor::test<visual_tests::renderer<visual_tests::agg_renderer> >(const visual_tests::renderer<visual_tests::agg_renderer> & renderer={...}) Line 82    C++
    run_visual_test.exe!visual_tests::renderer_visitor::operator()<visual_tests::renderer<visual_tests::agg_renderer>,0>(const visual_tests::renderer<visual_tests::agg_renderer> & renderer={...}) Line 63 C++
    run_visual_test.exe!mapbox::util::detail::dispatcher<visual_tests::renderer_visitor,mapnik::util::variant<visual_tests::renderer<visual_tests::agg_renderer>,visual_tests::renderer<visual_tests::svg_renderer>,visual_tests::renderer<visual_tests::grid_renderer> >,void,visual_tests::renderer<visual_tests::agg_renderer>,visual_tests::renderer<visual_tests::svg_renderer>,visual_tests::renderer<visual_tests::grid_renderer> >::apply_const(const mapnik::util::variant<visual_tests::renderer<visual_tests::agg_renderer>,visual_tests::renderer<visual_tests::svg_renderer>,visual_tests::renderer<visual_tests::grid_renderer> > & v={...}, visual_tests::renderer_visitor && f={...}) Line 302  C++
    run_visual_test.exe!mapbox::util::variant<visual_tests::renderer<visual_tests::agg_renderer>,visual_tests::renderer<visual_tests::svg_renderer>,visual_tests::renderer<visual_tests::grid_renderer> >::visit<visual_tests::renderer_visitor,mapnik::util::variant<visual_tests::renderer<visual_tests::agg_renderer>,visual_tests::renderer<visual_tests::svg_renderer>,visual_tests::renderer<visual_tests::grid_renderer> >,void>(const mapnik::util::variant<visual_tests::renderer<visual_tests::agg_renderer>,visual_tests::renderer<visual_tests::svg_renderer>,visual_tests::renderer<visual_tests::grid_renderer> > & v={...}, visual_tests::renderer_visitor && f={...}) Line 782  C++
    run_visual_test.exe!mapnik::util::apply_visitor<visual_tests::renderer_visitor,mapnik::util::variant<visual_tests::renderer<visual_tests::agg_renderer>,visual_tests::renderer<visual_tests::svg_renderer>,visual_tests::renderer<visual_tests::grid_renderer> > >(visual_tests::renderer_visitor && f={...}, const mapnik::util::variant<visual_tests::renderer<visual_tests::agg_renderer>,visual_tests::renderer<visual_tests::svg_renderer>,visual_tests::renderer<visual_tests::grid_renderer> > & v={...}) Line 52    C++
    run_visual_test.exe!visual_tests::runner::test_one(const boost::filesystem::path & style_path={...}, mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> & report={...}, std::atomic<unsigned int> & fail_count={...}) Line 334  C++
    run_visual_test.exe!visual_tests::runner::test_range(std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > > begin={...}, std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > > end={...}, std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> > report={...}, std::reference_wrapper<std::atomic<unsigned int> > fail_count={...}) Line 226  C++
    [External Code] 
    run_visual_test.exe!visual_tests::runner::test_parallel(const std::vector<boost::filesystem::path,std::allocator<boost::filesystem::path> > & files={...}, mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> & report={...}, unsigned int jobs=1) Line 205 C++
    run_visual_test.exe!visual_tests::runner::test_all(mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> & report={...}) Line 148  C++
    run_visual_test.exe!main(int argc=5, char * * argv=0x00b77870) Line 181 C++
    [External Code] 
@wilhelmberg
Copy link
Contributor

wilhelmberg commented Jun 14, 2016

@SNiLD

@SNiLD
Copy link
Author

SNiLD commented Jun 14, 2016

I built mapnik myself with CMake from: https://github.com/SNiLD/mapnik/tree/master

I run the test with the generated run_visual_test.exe with following command:
run_visual_test.exe --plugins mapnik/input --output-dir visual-test

I did not set any variables on path. Which variables are needed?

mapnik/test/data-visual is fetched via .gitmodules:

[submodule "test/data"]
    path = test/data
    url = https://github.com/mapnik/test-data.git
    branch = master
[submodule "test/data-visual"]
    path = test/data-visual
    url = https://github.com/mapnik/test-data-visual.git
    branch = master
[submodule "deps/mapbox/variant"]
    path = deps/mapbox/variant
    url = https://github.com/mapbox/variant.git

It might also be worth mentioning that other tests do not crash (if I move the group-symbolizer-4.xml file outside of styles directory so it's not run), although some tests do not pass.

@wilhelmberg
Copy link
Contributor

I built mapnik myself with CMake from: https://github.com/SNiLD/mapnik/tree/master

I suppose you are also building all the dependencies yourself?
We have quite some patches in place to make them all build on Windows.
Did you replicate those?
E.g. this harfbuzz patch, that was very hard to track down, but makes all the difference, because it lead to inconsistent and unexpected crashes.

Could you share the versions of your dependencies?
Do they match these?

I did not set any variables on path. Which variables are needed?

When we package mapnik we create a little batch file that sets PYTHONPATH, ICU_DATA, GDAL_DATA, PROJ_LIB and puts the lib and bin directories of the SDK on the %PATH%.

See https://mapnik.s3.amazonaws.com/dist/dev/mapnik-win-sdk-v3.0.10-x64-14.0.7z

mapnik/test/data-visual is fetched via .gitmodules:

If you are working off a fork and have the v3.0.10 tag checked out you should be good.

mapnik@v3.0.10 vs. mapnik@latest as of today:
image

image

It might also be worth mentioning that other tests do not crash (if I move the group-symbolizer-4.xml file outside of styles directory so it's not run),

Hm, that's interesting. As my first thought was that it might have something to do with your dependencies but then probably more crashes would occur.

although some tests do not pass.

Yes, working on that, e.g. #3437
Which others are failing for you?


Still trying to replicate your problem - running a new 3.0.10 build ATM as we don't package the test binaries with the SDK.

In the meantime, any chance you could provide a crash dump or exception information?
How did you get the stack trace?

What compiler and version thereof are you using?

@SNiLD
Copy link
Author

SNiLD commented Jun 14, 2016

I have compiled all of the dependencies myself. Here is the list of versions I'm using:

Library My version mapbox version
boost 1.60.0 1.60.0
icu 57.1 56.1
webp - 0.5.0
jpeg 9b 8d
jpegturbo - 1.4.2
freetype 2.6.3 2.6.1
zlib 1.2.8 1.2.8
bzip2 - 1.0.6
png 1.6.21 1.6.21
postgre - 9.4.5
tiff 4.0.6 4.0.6
pixman - 0.32.8
cairo - 1.14.4
libxml2 2.9.3 2.9.2
proj 4.9.2 4.9.2
proj-grids ❓ 1.5
expat 2.1.1 2.1.0
gdal 2.1.0 2.1.0
sqlite 3.12.2 3110000
spatialite 4.3.0a 4.2.0
protobuf - 2.6.1
sparsehash - 2.0.3
harfbuzz 1.2.7 1.1.2
geos 3.5.0 3.4.2
python - 2.7.8
node - 0.12.7
tbb - 43_20150209oss

I'm building mapnik as dynamic library (BUILD_SHARED_LIBS=TRUE).

I'm building harfbuzz from the Visual Studio project files that it provides. This newer version of harfbuzz does not seem to have any usage of HB_NO_MT define anywhere.

I'll test with those environment variables soon (altough they should not be related to the crash, but rather on some of the other tests failing).

I got the stack trace by attaching Visual Studio debugger to the run_visual_test.exe and copying it while attached to the crashed state. I'll try to get minidump of this state as well (although it might be quite unusable without mapnik debug library, which is over 1 GB).

Microsoft Visual Studio Express 2015 for Windows Desktop Version 14.0.25123.00 Update 2
NMake version: 14.00.23918.0
CMake version: 3.5.2

@SNiLD
Copy link
Author

SNiLD commented Jun 14, 2016

As I suspected the minidump is way too big to upload to github (160MB, 44.7MB compressed). I don't know what you mean with exception information? When you start debugging from a crash it's too late to catch any exceptions.

I tried running the tests with PROJ_LIB and GDAL_DATA environment variables (and it still crashes).
I didn't set ICU_DATA because my ICU is compiled as DLL with icudt57.dll in the run directory.
I don't know what I should've set for PYTHONPATH but I do have python (3.3.2) in path (NOTE that I have not compiled mapnik with python support).
Rest of the dependencies are in the run directory so there is no point in putting them to path.

Results without group-symbolizer-4.xml:
Visual rendering: 635 failed / 1385 passed / 0 overwritten / 0 errors

Unit tests:
test cases: 54 | 52 passed | 2 failed
assertions: 20286 | 20275 passed | 11 failed

Most unit test failures are from postgis because I don't have it. Another one is from image_io_test because it has hardcoded path /tmp/mapnik-lightblue.png which I can't have in Windows.

run_unit_test.exe is a Catch v1.3.2 host application.
Run with -? for options

-------------------------------------------------------------------------------
postgis
  Postgis data initialization
-------------------------------------------------------------------------------
C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\datasource\postgis.cpp(66)
...............................................................................

C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\datasource\postgis.cpp(71): FAILED:
  REQUIRE( run("dropdb --if-exists " + dbname) )
with expansion:
  false

-------------------------------------------------------------------------------
postgis
  Postgis should throw without geom column
-------------------------------------------------------------------------------
C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\datasource\postgis.cpp(66)
...............................................................................

C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\datasource\postgis.cpp(121): FAILED:
due to unexpected exception with message:
  Could not create datasource for type: 'postgis' (no datasource plugin
  directories have been successfully registered)

-------------------------------------------------------------------------------
postgis
  Postgis initialize dataset with persist_connection, schema, extent, geometry
  field, autodectect key field, simplify_geometries, row_limit
-------------------------------------------------------------------------------
C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\datasource\postgis.cpp(66)
...............................................................................

C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\datasource\postgis.cpp(139): FAILED:
due to unexpected exception with message:
  Could not create datasource for type: 'postgis' (no datasource plugin
  directories have been successfully registered)

-------------------------------------------------------------------------------
postgis
  Postgis dataset geometry type
-------------------------------------------------------------------------------
C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\datasource\postgis.cpp(66)
...............................................................................

C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\datasource\postgis.cpp(152): FAILED:
due to unexpected exception with message:
  Could not create datasource for type: 'postgis' (no datasource plugin
  directories have been successfully registered)

-------------------------------------------------------------------------------
postgis
  Postgis query field names
-------------------------------------------------------------------------------
C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\datasource\postgis.cpp(66)
...............................................................................

C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\datasource\postgis.cpp(161): FAILED:
due to unexpected exception with message:
  Could not create datasource for type: 'postgis' (no datasource plugin
  directories have been successfully registered)

-------------------------------------------------------------------------------
postgis
  Postgis iterate features
-------------------------------------------------------------------------------
C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\datasource\postgis.cpp(66)
...............................................................................

C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\datasource\postgis.cpp(173): FAILED:
due to unexpected exception with message:
  Could not create datasource for type: 'postgis' (no datasource plugin
  directories have been successfully registered)

-------------------------------------------------------------------------------
postgis
  Postgis cursorresultest
-------------------------------------------------------------------------------
C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\datasource\postgis.cpp(66)
...............................................................................

C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\datasource\postgis.cpp(204): FAILED:
due to unexpected exception with message:
  Could not create datasource for type: 'postgis' (no datasource plugin
  directories have been successfully registered)

-------------------------------------------------------------------------------
postgis
  Postgis bbox query
-------------------------------------------------------------------------------
C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\datasource\postgis.cpp(66)
...............................................................................

C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\datasource\postgis.cpp(231): FAILED:
due to unexpected exception with message:
  Could not create datasource for type: 'postgis' (no datasource plugin
  directories have been successfully registered)

-------------------------------------------------------------------------------
postgis
  Postgis query extent: full dataset
-------------------------------------------------------------------------------
C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\datasource\postgis.cpp(66)
...............................................................................

C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\datasource\postgis.cpp(246): FAILED:
due to unexpected exception with message:
  Could not create datasource for type: 'postgis' (no datasource plugin
  directories have been successfully registered)

-------------------------------------------------------------------------------
postgis
  Postgis query extent: from subquery with 'extent_from_subquery=true'
-------------------------------------------------------------------------------
C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\datasource\postgis.cpp(66)
...............................................................................

C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\datasource\postgis.cpp(277): FAILED:
due to unexpected exception with message:
  Could not create datasource for type: 'postgis' (no datasource plugin
  directories have been successfully registered)

Mapnik LOG> 2016-06-14 18:46:51: agg_renderer: Scale=2
Mapnik LOG> 2016-06-14 18:46:51: agg_renderer: Start map processing bbox=box2d(-256.0000000000000000,-256.0000000000000000,256.0000000000000000,256.0000000000000000)
Mapnik LOG> 2016-06-14 18:46:51: agg_renderer: Start processing layer=layer
Mapnik LOG> 2016-06-14 18:46:51: agg_renderer: -- datasource=01026708
Mapnik LOG> 2016-06-14 18:46:51: agg_renderer: -- query_extent=box2d(128.0000000000000000,128.0000000000000000,128.0000000000000000,128.0000000000000000)
Mapnik LOG> 2016-06-14 18:46:51: agg_renderer: Start processing style
Mapnik LOG> 2016-06-14 18:46:51: Failed to find face 'DejaVu Sans Book' in font set 'fontset'

Mapnik LOG> 2016-06-14 18:46:51: agg_renderer: End processing style
Mapnik LOG> 2016-06-14 18:46:51: agg_renderer: End layer processing
Mapnik LOG> 2016-06-14 18:46:51: agg_renderer: End map processing
Mapnik LOG> 2016-06-14 18:46:51: stroker: Destroy stroker=01019C90
-------------------------------------------------------------------------------
image io
  image_util : save_to_file/save_to_stream/save_to_string
-------------------------------------------------------------------------------
C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\imaging\image_io_test.cpp(18)
...............................................................................

C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\imaging\image_io_test.cpp(120): FAILED:
due to unexpected exception with message:
  Could not write file to /tmp/mapnik-lightblue.png

===============================================================================

@lightmare
Copy link
Contributor

lightmare commented Jun 14, 2016

hardcoded path /tmp/mapnik-lightblue.png which I can't have in Windows

Actually you can. It's simply on the current drive. With the version you're trying you'll need to create the X:/tmp/ directory yourself, with mapnik 3.0.11+ the test creates it.

As for the original issue, can you try with 3.0.11 or master, please? The bottom of your stack trace (I mean the bottom of the stack, i.e. visually the top of your trace;)) has undergone some refactoring. The error looks like double-delete in a stack-allocated container, which is pretty weird, and it'd be great if it just went away ;)

You can also try removing the three <MarkersSymbolizer file="shape://ellipse" ... /> in group-symbolizer-4.xml to see whether it happens with svg/png markers as well.

@wilhelmberg
Copy link
Contributor

@SNiLD first of all thanks for the detailed information.

As for the original issue, can you try with 3.0.11 or master, please?

Yes, master among other things would be great as PostGIS tests are only run if PostGIS is found.

I didn't set ICU_DATA because my ICU is compiled as DLL with icudt57.dll in the run directory.
I don't know what I should've set for PYTHONPATH but I do have python (3.3.2) in path (NOTE that I have not compiled mapnik with python support).
Rest of the dependencies are in the run directory so there is no point in putting them to path.

Makes sense.
As a side note: mapnik doesn't not support Python@3.x yet, but since you haven't compiled Python support that doesn't matter.

Results without group-symbolizer-4.xml:
Visual rendering: 635 failed / 1385 passed / 0 overwritten / 0 errors

635 failed that doesn't look good.

Another one is from image_io_test because it has hardcoded path /tmp/mapnik-lightblue.png which I can't have in Windows.

As @lightmare pointed out you could just create this one manually before running the tests if the user account running the tests doesn't have permissions to create a directory directly below C:\.

You can also make use of the --output-dir and --unique-subdir parameters to pass in any output directory you want.
--unique-subdir creates a new directory for each run within --output-dir, otherwise previous results get overwritten.

Unit tests:
test cases: 54 | 52 passed | 2 failed

That's the same it get, which might be due to a compiler bug in Visual Studio 2015 Update 2.
See #3437 and https://connect.microsoft.com/VisualStudio/feedback/details/2809804/c-optimization-bug

Mapnik LOG> 2016-06-14 18:46:51: Failed to find face 'DejaVu Sans Book' in font set 'fontset'

It seems fonts are not found. In the SDK we have them in lib\mapnik\fonts.

As I suspected the minidump is way too big to upload to github (160MB, 44.7MB compressed).

Any chance to upload it somewhere else? Dropbox, Google Drive, ...?

I don't know what you mean with exception information? When you start debugging from a crash it's too late to catch any exceptions.

There is no other information than the stack trace in the dump file?

Other ways to get a dump file that might contain more information:

  • Userdump.exe

https://www.microsoft.com/en-us/download/details.aspx?id=4060
https://support.microsoft.com/en-us/kb/241215

  • Procdump

https://technet.microsoft.com/en-us/sysinternals/dd996900
Which is nice as it also shows short exception messages on the console.
You can use it like this https://gist.github.com/BergWerkGIS/6385afd9f6e240eeb074#procdump

Ways to debug:

  • WinDbg

How to get and run it, see https://gist.github.com/BergWerkGIS/534a5e74301c5607af5c

  • Visual Studio

To step through the test as it is run right-click on the project -> Debug -> Start new instance:

image
Don't forget to set a break point in one of the CPPs before.


To sum up, it would be great if you could try to

  • use latest master (or 3.0.11)
  • exactly match the dependencies
  • provide a dump/exception message

@SNiLD
Copy link
Author

SNiLD commented Jun 15, 2016

I have merged tag v3.0.11 and tried with it and it still crashes (again when the mapnik::svg::path_attributes is destroyed when it gets out of scope).

I also tried commenting out the <MarkersSymbolizer file="shape://ellipse" ... /> sections but it still crashes when inside mapnik::detail::render_marker_symbolizer_visitor.

Here is the new stacktrace:

>   mapnik.dll!std::_Container_base12::_Orphan_all() Line 222   C++
    mapnik.dll!std::_Vector_alloc<std::_Vec_base_types<std::pair<double,double>,std::allocator<std::pair<double,double> > > >::_Orphan_all() Line 617   C++
    mapnik.dll!std::_Vector_alloc<std::_Vec_base_types<std::pair<double,double>,std::allocator<std::pair<double,double> > > >::_Free_proxy() Line 593   C++
    mapnik.dll!std::_Vector_alloc<std::_Vec_base_types<std::pair<double,double>,std::allocator<std::pair<double,double> > > >::~_Vector_alloc<std::_Vec_base_types<std::pair<double,double>,std::allocator<std::pair<double,double> > > >() Line 557    C++
    mapnik.dll!std::vector<std::pair<double,double>,std::allocator<std::pair<double,double> > >::~vector<std::pair<double,double>,std::allocator<std::pair<double,double> > >() Line 980    C++
    mapnik.dll!mapnik::svg::path_attributes::~path_attributes() C++
    mapnik.dll!`eh vector destructor iterator'(void * ptr=0x00993aa4, unsigned int size=368, unsigned int count=63, void(*)(void *) destructor=0x02377fcc)  C++
    mapnik.dll!mapnik::svg::path_attributes::`vector deleting destructor'(unsigned int) C++
    mapnik.dll!agg::pod_allocator<mapnik::svg::path_attributes>::deallocate(mapnik::svg::path_attributes * ptr=0x0098e014, unsigned int __formal=64) Line 41    C++
    mapnik.dll!agg::pod_bvector<mapnik::svg::path_attributes,6>::~pod_bvector<mapnik::svg::path_attributes,6>() Line 521    C++
    mapnik.dll!mapnik::detail::render_marker_symbolizer_visitor<mapnik::label_collision_detector4,mapnik::renderer_common,mapnik::markers_renderer_context>::operator()(const mapnik::marker_svg & mark={...}) Line 178 C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::detail::render_marker_symbolizer_visitor<mapnik::label_collision_detector4,mapnik::renderer_common,mapnik::markers_renderer_context> &,mapnik::marker,void,mapnik::marker_svg>::apply_const(const mapnik::marker & v={...}, mapnik::detail::render_marker_symbolizer_visitor<mapnik::label_collision_detector4,mapnik::renderer_common,mapnik::markers_renderer_context> & f={...}) Line 329    C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::detail::render_marker_symbolizer_visitor<mapnik::label_collision_detector4,mapnik::renderer_common,mapnik::markers_renderer_context> &,mapnik::marker,void,mapnik::marker_rgba8,mapnik::marker_svg>::apply_const(const mapnik::marker & v={...}, mapnik::detail::render_marker_symbolizer_visitor<mapnik::label_collision_detector4,mapnik::renderer_common,mapnik::markers_renderer_context> & f={...}) Line 306   C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::detail::render_marker_symbolizer_visitor<mapnik::label_collision_detector4,mapnik::renderer_common,mapnik::markers_renderer_context> &,mapnik::marker,void,mapnik::marker_null,mapnik::marker_rgba8,mapnik::marker_svg>::apply_const(const mapnik::marker & v={...}, mapnik::detail::render_marker_symbolizer_visitor<mapnik::label_collision_detector4,mapnik::renderer_common,mapnik::markers_renderer_context> & f={...}) Line 306   C++
    mapnik.dll!mapbox::util::variant<mapnik::marker_null,mapnik::marker_rgba8,mapnik::marker_svg>::visit<mapnik::detail::render_marker_symbolizer_visitor<mapnik::label_collision_detector4,mapnik::renderer_common,mapnik::markers_renderer_context> &,mapnik::marker,void>(const mapnik::marker & v={...}, mapnik::detail::render_marker_symbolizer_visitor<mapnik::label_collision_detector4,mapnik::renderer_common,mapnik::markers_renderer_context> & f={...}) Line 782   C++
    mapnik.dll!mapnik::util::apply_visitor<mapnik::detail::render_marker_symbolizer_visitor<mapnik::label_collision_detector4,mapnik::renderer_common,mapnik::markers_renderer_context> &,mapnik::marker>(mapnik::detail::render_marker_symbolizer_visitor<mapnik::label_collision_detector4,mapnik::renderer_common,mapnik::markers_renderer_context> & f={...}, const mapnik::marker & v={...}) Line 56   C++
    mapnik.dll!mapnik::render_markers_symbolizer(const mapnik::markers_symbolizer & sym={...}, mapnik::feature_impl & feature={...}, const mapnik::proj_transform & prj_trans={...}, const mapnik::renderer_common & common={...}, const mapnik::box2d<double> & clip_box={...}, mapnik::markers_renderer_context & renderer_context={...}) Line 261    C++
    mapnik.dll!mapnik::render_thunk_extractor::operator()(const mapnik::markers_symbolizer & sym={...}) Line 93 C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::render_thunk_extractor & f={...}) Line 302 C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::render_thunk_extractor & f={...}) Line 306 C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::render_thunk_extractor & f={...}) Line 306 C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::render_thunk_extractor & f={...}) Line 306   C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::render_thunk_extractor & f={...}) Line 306 C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::render_thunk_extractor & f={...}) Line 306  C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::render_thunk_extractor & f={...}) Line 306   C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::render_thunk_extractor & f={...}) Line 306   C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::render_thunk_extractor & f={...}) Line 306   C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::render_thunk_extractor & f={...}) Line 306  C++
    mapnik.dll!mapbox::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::visit<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void>(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::render_thunk_extractor & f={...}) Line 782  C++
    mapnik.dll!mapnik::util::apply_visitor<mapnik::render_thunk_extractor &,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> >(mapnik::render_thunk_extractor & f={...}, const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}) Line 56    C++
    mapnik.dll!mapnik::render_group_symbolizer(const mapnik::group_symbolizer & sym={...}, mapnik::feature_impl & feature={...}, const std::unordered_map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,mapnik::value_adl_barrier::value,std::hash<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::equal_to<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,mapnik::value_adl_barrier::value> > > & vars={...}, const mapnik::proj_transform & prj_trans={...}, const mapnik::box2d<double> & clipping_extent={...}, mapnik::renderer_common & common={...}, mapnik::render_thunk_list_dispatch & render_thunks={...}) Line 141  C++
    mapnik.dll!mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4>::process(const mapnik::group_symbolizer & sym={...}, mapnik::feature_impl & feature={...}, const mapnik::proj_transform & prj_trans={...}) Line 151   C++
    mapnik.dll!mapnik::process_impl<1>::process<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4>,mapnik::group_symbolizer,mapnik::feature_impl,mapnik::proj_transform>(mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> & ren={...}, const mapnik::group_symbolizer & sym={...}, mapnik::feature_impl & f={...}, const mapnik::proj_transform & tr={...}) Line 44   C++
    mapnik.dll!mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >::operator()<mapnik::group_symbolizer>(const mapnik::group_symbolizer & sym={...}) Line 82   C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 302 C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 306  C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 306  C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 306  C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 306    C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 306  C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 306   C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 306    C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 306    C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 306    C++
    mapnik.dll!mapbox::util::detail::dispatcher<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void,mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::apply_const(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 306   C++
    mapnik.dll!mapbox::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>::visit<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer>,void>(const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}, mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}) Line 782   C++
    mapnik.dll!mapnik::util::apply_visitor<mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >,mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> >(mapnik::symbolizer_dispatch<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> > && f={...}, const mapnik::util::variant<mapnik::point_symbolizer,mapnik::line_symbolizer,mapnik::line_pattern_symbolizer,mapnik::polygon_symbolizer,mapnik::polygon_pattern_symbolizer,mapnik::raster_symbolizer,mapnik::shield_symbolizer,mapnik::text_symbolizer,mapnik::building_symbolizer,mapnik::markers_symbolizer,mapnik::group_symbolizer,mapnik::debug_symbolizer,mapnik::dot_symbolizer> & v={...}) Line 56 C++
    mapnik.dll!mapnik::feature_style_processor<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >::render_style(mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> & p={...}, const mapnik::feature_type_style * style=0x0097b154, const mapnik::rule_cache & rc={...}, std::shared_ptr<mapnik::Featureset> features={...}, const mapnik::proj_transform & prj_trans={...}) Line 595  C++
    mapnik.dll!mapnik::feature_style_processor<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >::render_material(const mapnik::layer_rendering_material & mat={...}, mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> & p={...}) Line 554 C++
    mapnik.dll!mapnik::feature_style_processor<mapnik::agg_renderer<mapnik::image<mapnik::rgba8_t>,mapnik::label_collision_detector4> >::apply(double scale_denom=7951392.1995195420) Line 141  C++
    run_visual_test.exe!visual_tests::agg_renderer::render(const mapnik::Map & map={...}, double scale_factor=1.0000000000000000) Line 91   C++
    run_visual_test.exe!visual_tests::renderer<visual_tests::agg_renderer>::render(const mapnik::Map & map={...}, double scale_factor=1.0000000000000000) Line 243  C++
    run_visual_test.exe!visual_tests::renderer_visitor::render<visual_tests::renderer<visual_tests::agg_renderer>,0>(const visual_tests::renderer<visual_tests::agg_renderer> & renderer={...}) Line 103    C++
    run_visual_test.exe!visual_tests::renderer_visitor::test<visual_tests::renderer<visual_tests::agg_renderer> >(const visual_tests::renderer<visual_tests::agg_renderer> & renderer={...}) Line 82    C++
    run_visual_test.exe!visual_tests::renderer_visitor::operator()<visual_tests::renderer<visual_tests::agg_renderer>,0>(const visual_tests::renderer<visual_tests::agg_renderer> & renderer={...}) Line 63 C++
    run_visual_test.exe!mapbox::util::detail::dispatcher<visual_tests::renderer_visitor,mapnik::util::variant<visual_tests::renderer<visual_tests::agg_renderer>,visual_tests::renderer<visual_tests::svg_renderer>,visual_tests::renderer<visual_tests::grid_renderer> >,void,visual_tests::renderer<visual_tests::agg_renderer>,visual_tests::renderer<visual_tests::svg_renderer>,visual_tests::renderer<visual_tests::grid_renderer> >::apply_const(const mapnik::util::variant<visual_tests::renderer<visual_tests::agg_renderer>,visual_tests::renderer<visual_tests::svg_renderer>,visual_tests::renderer<visual_tests::grid_renderer> > & v={...}, visual_tests::renderer_visitor && f={...}) Line 302  C++
    run_visual_test.exe!mapbox::util::variant<visual_tests::renderer<visual_tests::agg_renderer>,visual_tests::renderer<visual_tests::svg_renderer>,visual_tests::renderer<visual_tests::grid_renderer> >::visit<visual_tests::renderer_visitor,mapnik::util::variant<visual_tests::renderer<visual_tests::agg_renderer>,visual_tests::renderer<visual_tests::svg_renderer>,visual_tests::renderer<visual_tests::grid_renderer> >,void>(const mapnik::util::variant<visual_tests::renderer<visual_tests::agg_renderer>,visual_tests::renderer<visual_tests::svg_renderer>,visual_tests::renderer<visual_tests::grid_renderer> > & v={...}, visual_tests::renderer_visitor && f={...}) Line 782  C++
    run_visual_test.exe!mapnik::util::apply_visitor<visual_tests::renderer_visitor,mapnik::util::variant<visual_tests::renderer<visual_tests::agg_renderer>,visual_tests::renderer<visual_tests::svg_renderer>,visual_tests::renderer<visual_tests::grid_renderer> > >(visual_tests::renderer_visitor && f={...}, const mapnik::util::variant<visual_tests::renderer<visual_tests::agg_renderer>,visual_tests::renderer<visual_tests::svg_renderer>,visual_tests::renderer<visual_tests::grid_renderer> > & v={...}) Line 56    C++
    run_visual_test.exe!visual_tests::runner::test_one(const boost::filesystem::path & style_path={...}, mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> & report={...}, std::atomic<unsigned int> & fail_count={...}) Line 334  C++
    run_visual_test.exe!visual_tests::runner::test_range(std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > > begin={...}, std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > > end={...}, std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> > report={...}, std::reference_wrapper<std::atomic<unsigned int> > fail_count={...}) Line 226  C++
    [External Code] 
    run_visual_test.exe!visual_tests::runner::test_parallel(const std::vector<boost::filesystem::path,std::allocator<boost::filesystem::path> > & files={...}, mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> & report={...}, unsigned int jobs=1) Line 205 C++
    run_visual_test.exe!visual_tests::runner::test_all(mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> & report={...}) Line 148  C++
    run_visual_test.exe!main(int argc=5, char * * argv=0x008c1d98) Line 181 C++
    [External Code] 

I have uploaded this minidump to dropbox as well: render_markers_symbolizer_crash.zip

I also tried procdump like @BergWerkGIS suggested and it catches unhandled exception in earlier test with following trace:

    KERNELBASE.dll!_RaiseException@16()  + 0x48 bytes   
    VCRUNTIME140D.dll!_CxxThrowException(void * pExceptionObject=0x0018b518, const _s__ThrowInfo * pThrowInfo=0x09148d80)  Line 136 C++
>   shape.input!shape_file::shape_file(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & file_name={...})  Line 182 + 0x3c bytes C++
    shape.input!std::make_unique<shape_file,std::basic_string<char,std::char_traits<char>,std::allocator<char> > >()  Line 1630 + 0x32 bytes    C++
    shape.input!shape_io::shape_io(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & shape_name={...}, bool open_index=true)  Line 56 + 0x41 bytes   C++
    shape.input!shape_datasource::shape_datasource(const mapnik::parameters & params={...})  Line 101 + 0x14 bytes  C++
    shape.input!create(const mapnik::parameters & params={...})  Line 50 + 0x3d bytes   C++
    mapnik.dll!mapnik::datasource_cache::create(const mapnik::parameters & params={...})  Line 126 + 0x14 bytes C++
    mapnik.dll!mapnik::map_parser::parse_layer(mapnik::Map & map={...}, const mapnik::xml_node & node={...})  Line 749 + 0x24 bytes C++
    mapnik.dll!mapnik::map_parser::parse_map_include(mapnik::Map & map={...}, const mapnik::xml_node & node={...})  Line 356 + 0x10 bytes   C++
    mapnik.dll!mapnik::map_parser::parse_map(mapnik::Map & map={...}, const mapnik::xml_node & node={...}, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & base_path={...})  Line 327  C++
    mapnik.dll!mapnik::load_map(mapnik::Map & map={...}, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & filename={...}, bool strict=true, std::basic_string<char,std::char_traits<char>,std::allocator<char> > base_path={...})  Line 159 C++
    run_visual_test.exe!visual_tests::runner::test_one(const boost::filesystem::path & style_path={...}, mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> & report={...}, std::atomic<unsigned int> & fail_count={...})  Line 260 + 0x74 bytes    C++
    run_visual_test.exe!visual_tests::runner::test_range(std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > > begin={preferred_separator=L'婍' m_pathname={...} }, std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > > end={preferred_separator=L'婍' m_pathname={...} }, std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> > report={...}, std::reference_wrapper<std::atomic<unsigned int> > fail_count={...})  Line 226 + 0x25 bytes  C++
    run_visual_test.exe!std::_Invoker_pmf_pointer::_Call<std::vector<visual_tests::result,std::allocator<visual_tests::result> > (__thiscall visual_tests::runner::*)(std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> >)const ,visual_tests::runner const *,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> > >(std::vector<visual_tests::result,std::allocator<visual_tests::result> > (std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >, std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >, std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >, std::reference_wrapper<std::atomic<unsigned int> >)* _Pmf=0x00202b62, const visual_tests::runner * && _Arg1=0x0018f8fc)  Line 1363 + 0x7b bytes C++
    run_visual_test.exe!std::invoke<std::vector<visual_tests::result,std::allocator<visual_tests::result> > (__thiscall visual_tests::runner::*)(std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> >)const ,visual_tests::runner const *,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> > >(std::vector<visual_tests::result,std::allocator<visual_tests::result> > (std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >, std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >, std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >, std::reference_wrapper<std::atomic<unsigned int> >)* && _Obj=0x00202b62)  Line 1466 + 0x59 bytes C++
    run_visual_test.exe!std::_Invoke_stored_explicit<std::vector<visual_tests::result,std::allocator<visual_tests::result> > (__thiscall visual_tests::runner::*)(std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> >)const ,visual_tests::runner const *,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> >,0,1,2,3,4,5>(std::tuple<std::vector<visual_tests::result,std::allocator<visual_tests::result> > (__thiscall visual_tests::runner::*)(std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> >)const ,visual_tests::runner const *,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> > > && _Tuple={...}, std::integer_sequence<unsigned int,0,1,2,3,4,5> __formal={...})  Line 470 + 0x8d bytes    C++
    run_visual_test.exe!std::_Invoke_stored<std::vector<visual_tests::result,std::allocator<visual_tests::result> > (__thiscall visual_tests::runner::*)(std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> >)const ,visual_tests::runner const *,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> > >(std::tuple<std::vector<visual_tests::result,std::allocator<visual_tests::result> > (__thiscall visual_tests::runner::*)(std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> >)const ,visual_tests::runner const *,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> > > && _Tuple={...})  Line 478 + 0x1b bytes    C++
    run_visual_test.exe!std::_Fake_no_copy_callable_adapter<std::vector<visual_tests::result,std::allocator<visual_tests::result> > (__thiscall visual_tests::runner::*)(std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> >)const ,visual_tests::runner const * const,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > > &,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > > &,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> > >::operator()()  Line 1885 + 0x16 bytes    C++
    run_visual_test.exe!std::_Invoker_functor::_Call<std::_Fake_no_copy_callable_adapter<std::vector<visual_tests::result,std::allocator<visual_tests::result> > (__thiscall visual_tests::runner::*)(std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> >)const ,visual_tests::runner const * const,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > > &,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > > &,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> > > &>(std::_Fake_no_copy_callable_adapter<std::vector<visual_tests::result,std::allocator<visual_tests::result> > (__thiscall visual_tests::runner::*)(std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> >)const ,visual_tests::runner const * const,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > > &,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > > &,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> > > & _Obj={...})  Line 1398 + 0x17 bytes C++
    run_visual_test.exe!std::invoke<std::_Fake_no_copy_callable_adapter<std::vector<visual_tests::result,std::allocator<visual_tests::result> > (__thiscall visual_tests::runner::*)(std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> >)const ,visual_tests::runner const * const,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > > &,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > > &,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> > > &>(std::_Fake_no_copy_callable_adapter<std::vector<visual_tests::result,std::allocator<visual_tests::result> > (__thiscall visual_tests::runner::*)(std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> >)const ,visual_tests::runner const * const,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > > &,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > > &,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> > > & _Obj={...})  Line 1466 + 0x16 bytes  C++
    run_visual_test.exe!std::_Invoke_ret<std::vector<visual_tests::result,std::allocator<visual_tests::result> >,std::_Fake_no_copy_callable_adapter<std::vector<visual_tests::result,std::allocator<visual_tests::result> > (__thiscall visual_tests::runner::*)(std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> >)const ,visual_tests::runner const * const,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > > &,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > > &,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> > > &>(std::_Forced<std::vector<visual_tests::result,std::allocator<visual_tests::result> >,0> __formal={...})  Line 1491 + 0x16 bytes  C++
    run_visual_test.exe!std::_Func_impl<std::_Fake_no_copy_callable_adapter<std::vector<visual_tests::result,std::allocator<visual_tests::result> > (__thiscall visual_tests::runner::*)(std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > >,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> >)const ,visual_tests::runner const * const,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > > &,std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<boost::filesystem::path> > > &,std::reference_wrapper<mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> >,std::reference_wrapper<std::atomic<unsigned int> > >,std::allocator<int>,std::vector<visual_tests::result,std::allocator<visual_tests::result> > >::_Do_call()  Line 212 + 0x17 bytes C++
    run_visual_test.exe!std::_Func_class<std::vector<visual_tests::result,std::allocator<visual_tests::result> > >::operator()()  Line 279 + 0x1e bytes C++
    run_visual_test.exe!std::_Packaged_state<std::vector<visual_tests::result,std::allocator<visual_tests::result> > __cdecl(void)>::_Call_immediate()  Line 609 + 0x12 bytes   C++
    run_visual_test.exe!std::_Deferred_async_state<std::vector<visual_tests::result,std::allocator<visual_tests::result> > >::_Run_deferred_function(std::unique_lock<std::mutex> & _Lock={...})  Line 884  C++
    run_visual_test.exe!std::_Associated_state<std::vector<visual_tests::result,std::allocator<visual_tests::result> > >::_Maybe_run_deferred_function(std::unique_lock<std::mutex> & _Lock={...})  Line 473 + 0x13 bytes   C++
    run_visual_test.exe!std::_Associated_state<std::vector<visual_tests::result,std::allocator<visual_tests::result> > >::_Get_value(bool _Get_only_once=true)  Line 359    C++
    run_visual_test.exe!std::_State_manager<std::vector<visual_tests::result,std::allocator<visual_tests::result> > >::_Get_value()  Line 1024 + 0x1b bytes C++
    run_visual_test.exe!std::future<std::vector<visual_tests::result,std::allocator<visual_tests::result> > >::get()  Line 1144 + 0x8 bytes C++
    run_visual_test.exe!visual_tests::runner::test_parallel(const std::vector<boost::filesystem::path,std::allocator<boost::filesystem::path> > & files=[...](..., mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> & report={...}, unsigned int jobs=1)  Line 205 + 0x12 bytes   C++
    run_visual_test.exe!visual_tests::runner::test_all(mapnik::util::variant<visual_tests::console_report,visual_tests::console_short_report> & report={...})  Line 148 + 0x1e bytes    C++
    run_visual_test.exe!main(int argc=5, char * * argv=0x006de148)  Line 181 + 0x19 bytes   C++
    run_visual_test.exe!invoke_main()  Line 64 + 0x1b bytes C++
    run_visual_test.exe!__scrt_common_main_seh()  Line 255 + 0x5 bytes  C++
    run_visual_test.exe!__scrt_common_main()  Line 300  C++
    run_visual_test.exe!mainCRTStartup()  Line 17   C++
    kernel32.dll!@BaseThreadInitThunk@12()  + 0x24 bytes    
    ntdll.dll!__RtlUserThreadStart()  + 0x2f bytes  
    ntdll.dll!__RtlUserThreadStart@8()  + 0x1b bytes    

I have uploaded this dump to dropbox as well: shapefile_memory_mapped_exception.zip

New version visual test results (without group-symbolizer-4.xml):
Visual rendering: 481 failed / 1539 passed / 0 overwritten / 0 errors

Unit tests:
test cases: 56 | 55 passed | 1 failed
assertions: 20466 | 20456 passed | 10 failed

So only the postgis unit tests are now failing (because I don't have it).

@wilhelmberg
Copy link
Contributor

Opening render_markers_symbolizer_crash.zip with WinDbg hints at the problematic code probably being

mapnik!mapnik::image_view<mapnik::image<mapnik::gray8s_t> >::data

Although that might be wrong as there is no stack unwind information available.


@SNiLD from the dump file I see you are doing Debug builds, could you try a Release build with debug symbols enabled?
You would also have to rebuild all your dependencies in Release, too.

We've stopped doing Debug builds some time ago as they were too much hazzle, eg problems with OBJ files, even with /BIGOBJ.

As next step I'll look into the group-symbolizer-4.xml test in detail to see if I can spot anything that might cause the crash (works on my machine 😏 ).

@SNiLD
Copy link
Author

SNiLD commented Jun 15, 2016

We've stopped doing Debug builds some time ago as they were too much hazzle, eg problems with OBJ files, even with /BIGOBJ.

Yes I have read about #3327 for example. I was wondering how they profile the memory usage while compiling a specific file. If they're talking about .obj file size on disk my render_markers_symbolizer.cpp.objwas about 200MB with version 3.0.10 and now with 3.0.11 it's 13.1MB for debug build.

Maybe you should try the CMake generated files. In general they seem to work very well even for complicated projects.

@SNiLD from the dump file I see you are doing Debug builds, could you try a Release build with debug symbols enabled?
You would also have to rebuild all your dependencies in Release, too.

I need both Debug and Release builds with my C++ project so I already have Release versions of all of the dependencies. I'll try to compile RelWithDebInfo version as well.

@BergWerkGIS Did you notice that my unit tests run fine, so no #3437 error that you get with your project 😏 ?

@wilhelmberg
Copy link
Contributor

wilhelmberg commented Jun 15, 2016

@SNiLD could you try to remove the last three GroupRules and check if the test still crashes?

You can pass in just that test like so: --styles path/to/styles/group-symbolizer-4.xml.

@BergWerkGIS Did you notice that my unit tests run fine, so no #3437 error that you get with your project 😏 ?

Yes that's very interesting.

Maybe you should try the CMake generated files. In general they seem to work very well even for compilicated projects.

Yes, would be interested to give your build scripts a go for comparison.

Where/how would I start? Here? https://github.com/SNiLD/mapnik-cmake

@SNiLD
Copy link
Author

SNiLD commented Jun 15, 2016

Where/how would I start? Here? https://github.com/SNiLD/mapnik-cmake

Those are old CMake files for mapnik 2.2.0.

You should start from here: https://github.com/SNiLD/mapnik

I've made tags for v3.0.10-cmake and v3.0.11-cmake (which are basically the respective tags from mapnik but with CMake files added).

If you're unfamiliar with CMake here are simplified instructions for building with CMake:

  • Get CMake from https://cmake.org/download/ and use the installer (or extract somewhere and make sure cmake is in path).
  • Clone the repository with the submodules (like you would for normal mapnik build). Here I assume you have cloned it with name mapnik-SNiLD
  • Create subdirectory on the same level for example: mkdir mapnik-SNiLD-build-release
  • Move to that directory cd mapnik-SNiLD-build-release
  • Generate build files for your build system for example: cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_SHARED_LIBS:BOOL=TRUE ..\mapnik-SNiLD
  • Now you have NMake make files which you can use to build with: nmake
  • After the build you can install the SDK with: nmake install
    • The result will be in Deployment directory on the same level as the cloned project.

CMake uses find scripts to find specific dependencies. By default dependencies are searched with find_path and find_library commands.

You have two general ways to find the dependencies:

  • Copy your dependencies in the directories searched by CMake scripts by default (i.e. C:/Program Files;C:/Program Files (x86);C:/Program Files (x86)/CMake; and install directory)
  • More cleaner way is to give CMake more hints where these libraries are found by defining CMAKE_PREFIX_PATH.
    You should have your dependency contents divided under same bin/, lib/ and include/ directories.
    • You can give CMAKE_PREFIX_PATH from command-line:
      cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_SHARED_LIBS:BOOL=TRUE -DCMAKE_PREFIX_PATH=C:\dependencies ..\mapnik-SNiLD
    • Note that CMAKE_PREFIX_PATH can be a list so you can have separate path for each dependency if you want: cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_SHARED_LIBS:BOOL=TRUE -DCMAKE_PREFIX_PATH="C:\dependencies;C:\boost" ..\mapnik-SNiLD

@SNiLD
Copy link
Author

SNiLD commented Jun 15, 2016

@SNiLD from the dump file I see you are doing Debug builds, could you try a Release build with debug symbols enabled?
You would also have to rebuild all your dependencies in Release, too.

I now ran the visual tests with Release with Debug info build and it does not crash (however the progress print is a bit cryptic, probably have to check what's wrong there). In release mode I have two more failures and two more successes (because now I can get group-symbolizer-4.xml tests included and 2 of them succeeds and 2 fails).

This would hint that there is underlying issue with how the mapnik::svg::path_attributes is deallocated. Since you don't test with debug builds anymore it's not a surprise that this has slipped past the tests.

Here's what the output looks like:

c:\toni\libraries\MapnikSDK\Deployment\RelWithDebInfo\bin\RelWithDebInfo>run_visual_test.exe --plugins mapnik/input --output-dir visual-test
............Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ.Ô£ÿ..................................................................Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ........Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ......................................Ô£ÿ..Ô£ÿ.Ô£ÿ..................Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ.Ô£ÿ..................Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ........Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿ............Ô£ÿ.Ô£ÿÔ£ÿ..............Ô£ÿ.Ô£ÿÔ£ÿ....................Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ.....Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ.....Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ.....Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ........Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ............................................................................................................................................Ô£ÿ..Ô£ÿ..............................................................Ô£ÿ..Ô£ÿ......................................Ô£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ........Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..........................Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..........................................................................................................................Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..............Ô£ÿ..Ô£ÿ........Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ........Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ........Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ.Ô£ÿ................................................Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ.Ô£ÿ.Ô£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ.Ô£ÿ...Ô£ÿ.Ô£ÿ...Ô£ÿ..Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ.Ô£ÿÔ£ÿ.Ô£ÿÔ£ÿ..Ô£ÿ..Ô£ÿ..Ô£ÿ.Ô£ÿ............................................................................................................................................................Ô£ÿ..Ô£ÿ....................Ô£ÿ..Ô£ÿ..............
Visual rendering: 483 failed / 1543 passed / 0 overwritten / 0 errors
View failure report at "visual-test\visual-test-results\index.html"

@SNiLD could you try to remove the last three GroupRules and check if the test still crashes?

I tried removing the last 3 GroupRules and the test still crashes with debug build.

@wilhelmberg
Copy link
Contributor

Interesting, tests that fail in Debug but work in Release. Most of the time it's the other way round.

In release mode I have two more failures and two more successes

How about the core test #3437?
Is it failing in your Release build?
My conclusion was that it fails with optimization on (aka Release) and works with optimization off (aka Debug).

@SNiLD
Copy link
Author

SNiLD commented Jun 15, 2016

How about the core test #3437?
Is it failing in your Release build?
My conclusion was that it fails with optimization on (aka Release) and works with optimization off (aka Debug).

You're correct. I'm getting the same error when running on release mode:

-------------------------------------------------------------------------------
conversions
  to string
-------------------------------------------------------------------------------
C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\core\conversions_test.cpp(17)
...............................................................................

C:\toni\libraries\MapnikSDK\mapnik-SNiLD\test\unit\core\conversions_test.cpp(236): FAILED:
  REQUIRE( out == "-2" )
with expansion:
  "-4294967294" == "-2"

-------------------------------------------------------------------------------

@wilhelmberg
Copy link
Contributor

@SNiLD I've troubles to get your cmake version working:

Could not find the following Boost libraries:

          boost_date_time
          boost_filesystem
          boost_regex
          boost_system
          boost_program_options

No Boost libraries were found.  You may need to set BOOST_LIBRARYDIR to the

But they are here:

image

  • I've set -DCMAKE_PREFIX_PATH to the root of the mapnik SDK.
  • I've tried BOOST_LIBRARYDIR:
    • SET BOOST_LIBRARYDIR=<mapnik-sdk>\lib before calling Cmake
    • -DBOOST_LIBRARYDIR=<mapnik-sdk>\lib as an Cmake argument
  • I've tried -DCMAKE_LIBRARY_PATH=<mapnik-sdk>\lib

Any ideas?

@SNiLD
Copy link
Author

SNiLD commented Jun 15, 2016

I have linked against the dynamic versions of the boost libraries. But basically my cmake version uses the CMake provided FindBoost.cmake module.

Using the CMake argument is the way to go as you have tried. In addition to BOOST_LIBRARYDIR I have also defined BOOST_INCLUDEDIR when I build with the files.
My full cmake build command is as follows (because I have special directory structure for most libraries):

cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_SHARED_LIBS:BOOL=TRUE -DCMAKE_LIBRARY_ARCHITECTURE=MSVC -DCMAKE_PREFIX_PATH="C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\boost;C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\freetype;C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\gdal;C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\harfbuzz;C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\iconv;C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\icu;C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\jpeg;C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\png;C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\proj;C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\spatialite;C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\sqlite;C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\tiff;C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\xml2;C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\zlib" -DCMAKE_LIBRARY_PATH="C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\freetype\lib\MSVC\Release;C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\gdal\lib\MSVC14\Release;C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\harfbuzz\lib\MSVC14\Release;C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\icu\lib\MSVC14\Release;C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\jpeg\lib\MSVC14;C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\png\lib\MSVC\Release;C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\proj\lib\MSVC\Release;C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\tiff\lib\MSVC\Release;C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\xml2\lib\MSVC\Release" -DBOOST_INCLUDEDIR=C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\boost\include -DBOOST_LIBRARYDIR=C:\toni\libraries\MapnikSDK\mapnik-SNiLD\CommonLib\boost\lib\MSVC ..\mapnik-SNiLD

The preferred way to find boost is to define the BOOST_ROOT to point to the directory where the default boost installation extracts to.

@wilhelmberg
Copy link
Contributor

Oh my, finally got past boost not found, last resort was to rename the boost*.lib files.
Now I'm stuck at Could NOT find ICONV.
And Boost regex was NOT built with ICU. although I'm sure it is.

@lightmare
Copy link
Contributor

Ok here's a theory.

marker.hpp

    inline mapnik::svg_path_ptr get_data() const
    {
        return vector_data_;
    }

render_markers_symbolizer.cpp

    boost::optional<svg_path_ptr> const& stock_vector_marker = mark.get_data();

I was a little bit surprised this conversion compiles without complaints, but I guess it's correct. It constructs a temporary optional from a temporary svg_path_ptr returned from mark.get_data() and binds it to a reference -- which extends the temporary's lifetime until the reference goes out of scope. This is fine according to the standard, but who knows what the compiler thinks.

The optional there is a remnant of old code, anyway, so I'd remove it.

        svg_path_ptr stock_vector_marker = mark.get_data();
        svg_path_ptr marker_ptr = stock_vector_marker;
        bool is_ellipse = false;

        svg_attribute_type s_attributes;
        auto const& r_attributes = get_marker_attributes(stock_vector_marker, s_attributes);

@SNiLD
Copy link
Author

SNiLD commented Jun 16, 2016

@lightmare I tried this fix you proposed but it still crashes from the same place.

@BergWerkGIS What's the name of your iconv library? The iconv find script assumes iconv libiconv libiconv-2 for the library names (you can see these additional find scripts from cmake/Modules. Usually scripts provide ways to give additional name hints for the libraries but apparently that iconv find script does not. If your iconv library is not one of the mentioned ones you have to modify the FindICONV.cmake file and add the name of your iconv library.

@SNiLD SNiLD changed the title Visual test group-symbolizer-4.xml crashes with access violation on windows with mapnik 3.0.10 Visual test group-symbolizer-4.xml crashes with access violation on windows with mapnik 3.0.11 Jun 16, 2016
@wilhelmberg
Copy link
Contributor

Just realized we don't build iconv.

@lightmare
Copy link
Contributor

I think I found the issue.

vector_marker_render_thunk stores a copy of svg_attribute_type = agg::pod_bvector<svg::path_attributes>;

Although in mapnik we have modified pod_allocator to call constructors/destructors of non-POD types, pod_bvector's copy constructor and assignment operator still use memcpy! I'm baffled that this only blows in windows debug build, and nowhere else, but that might be because there aren't more tests with MarkersSymbolizer inside GroupSymbolizer.

@artemp @springmeyer
Simple fix: replace memcpy in agg::pod_bvector with std::copy. But even then it still won't be 100% non-POD capable because of serialize/deserialize methods. And IMO all these agg::pod_* containers should be using malloc and realloc, anyway.

Proper fix: make svg_attribute_type use deque instead. What do you think?

@artemp
Copy link
Member

artemp commented Jun 16, 2016

@lightmare - great find! We should definitely replace pod_* with std containers, not just memcpy=>std::copy
/cc @BergWerkGIS @SNiLD

lightmare added a commit to lightmare/mapnik that referenced this issue Jun 16, 2016
@lightmare
Copy link
Contributor

I've just learned std::deque may require a complete type at the point of instantiation.
https://travis-ci.org/lightmare/mapnik/jobs/138204899#L1441

It's easily fixed with an include, but while investigating why it compiled successfully on linux (it's because here the block size is defined in terms of a function rather than a static constant member), I found out that with sizeof(path_attributes) being roughly 400, the number of elements per block will be 16 on osx but only 1 on linux.

I wonder if I should go with the include to have the complete type, or with a list instead (that would make smaller but more frequent allocations on osx, no difference on linux).

I've always assumed deque puts more than 1 element in a block, doesn't deallocate immediately after a pop, and reuses blocks emptied from either end for pushes on either end. Learning none of that is guaranteed was a big disappointment.

@artemp
Copy link
Member

artemp commented Jun 17, 2016

@lightmare -
std::deque vs std::list - My hunch is that for complex SVGs frequent system calls to allocate memory might become significant in term of performance, so using deque and perhaps addressing block size on linux via custom allocator if performance degrades ?
Also, originally path_attributes was POD - I wonder if making it POD again is something worth looking into.

@wilhelmberg
Copy link
Contributor

@SNiLD could you share your scripts to build dependencies?
Privately if you want (my_first_name AT mapbox DOT com).

I've managed to build the deps that are required by your scripts but we don't build by default (iconv, geos, spatialite) and with some tweaks and fiddling finally got past the cmake step.

As a side note, some deps seem to get found (version is detected), but are not recognized as found, e.g.:

Could NOT find TIFF (missing:  TIFF_LIBRARY) (found version "4.0.4")
Could NOT find ICU (missing: ICU_LIBRARIES) (found version "56.1.0")

Now at the nmake step the whole not found trouble starts again: boost, icu, ...

@SNiLD
Copy link
Author

SNiLD commented Jun 17, 2016

@SNiLD could you share your scripts to build dependencies?

I don't have any special scripts for building dependencies. They're build with the provided build systems of each library.
Then I upload each library to private repository which has following structure:

bin\<compiler>\<build>\*.dll
include\
lib\<compiler>\<build>\*.lib

When I build mapnik, I first pull the dependencies from this repository with custom script so that I get following directory structure under mapnik-SNiLD (directory of mapnik sources):

CommonLib\<library>\bin\<compiler>\<build>\*.dll
CommonLib\<library>\include
CommonLib\<library>\lib\<compiler>\<build>\*.lib

In this case the <compiler> is MSVC (if the library was built with MinGW-w64) or MSVC14 (if the library was built with Visual Studio 2015 Express). This is why I set -DCMAKE_LIBRARY_ARCHITECTURE=MSVC (so that libraries built with MinGW-w64 are found easily) but this is also why I need to set CMAKE_LIBRARY_PATH for libraries that are built with Visual Studio 2015.

I've managed to build the deps that are required by your scripts but we don't build by default (iconv, geos, spatialite)

geos is not dependency for my build scripts, it's implicit dependency of spatialite. Building without it should be successful but running the program without the implicit dependencies will fail.
spatialite is optional dependency for SQLite plugin but should not be required.

You should get a list of Required, Recommended and Optional dependencies after the CMake generation is successful.

As a side note, some deps seem to get found (version is detected)

This means your include directories are correct but the library directories/names are not (like it says missing: TIFF_LIBRARY and missing: ICU_LIBRARIES).

If your tiff library name is exotic you can provide the custom library name with -DTIFF_NAMES=customnamehere.

Default dependency find scripts are located in C:\Program Files (x86)\CMake\share\cmake-3.5\Modules
Custom dependency find scripts are located in cmake/Modules.

These are the locations you should search for the find scripts for hints what names they assume for your libraries (and where they search by default). For example the find_package(TIFF) tries to first open FindTIFF.cmake from CMAKE_MODULE_PATH i.e. cmake/Modules and then from the default path.

Maybe we should move this CMake discussion out of this ticket and maybe create a new one?

@lightmare
Copy link
Contributor

@artemp Right, I'll use deque and if it tanks, we can look for optimizations. list with a custom allocator would be an obvious one. Maybe even pool inner vector (dash_array, stop_array) allocations.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants