From d9c446a075fa492c1b45a4b012714cf1f3ab503f Mon Sep 17 00:00:00 2001 From: Mike Morris Date: Wed, 1 Apr 2015 16:20:06 -0400 Subject: [PATCH] init display connection on module load add sudo: required move source up to initialization on NodeMap static sharedDisplay method --- .travis.yml | 2 ++ src/node_map.cpp | 27 ++++++++++++++++++--------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index fa16fd0c2..c2e1ef493 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,3 +39,5 @@ after_success: git: submodules: true + +sudo: required diff --git a/src/node_map.cpp b/src/node_map.cpp index 2e2ef7f98..e3acbeea7 100644 --- a/src/node_map.cpp +++ b/src/node_map.cpp @@ -5,7 +5,7 @@ #include #include - #include +#include namespace node_mbgl { @@ -25,6 +25,11 @@ struct NodeMap::RenderOptions { v8::Persistent NodeMap::constructorTemplate; +static std::shared_ptr sharedDisplay() { + static auto display = std::make_shared(); + return display; +} + void NodeMap::Init(v8::Handle target) { NanScope(); @@ -40,6 +45,9 @@ void NodeMap::Init(v8::Handle target) { NanAssignPersistent(constructorTemplate, t); target->Set(NanNew("Map"), t->GetFunction()); + + // Initialize display connection on module load. + sharedDisplay(); } NAN_METHOD(NodeMap::New) { @@ -63,8 +71,13 @@ NAN_METHOD(NodeMap::New) { return NanThrowError("FileSource must have a cancel member function"); } - auto map = new NodeMap(args[0]->ToObject()); - map->Wrap(args.This()); + + try { + auto map = new NodeMap(source); + map->Wrap(args.This()); + } catch(std::exception &ex) { + return NanThrowError(ex.what()); + } NanReturnValue(args.This()); } @@ -273,17 +286,13 @@ void NodeMap::renderFinished() { //////////////////////////////////////////////////////////////////////////////////////////////// // Instance -std::shared_ptr sharedDisplay() { - static auto display = std::make_shared(); - return display; -} - NodeMap::NodeMap(v8::Handle source_) : + source(source_), view(sharedDisplay()), fs(*ObjectWrap::Unwrap(source_)), map(view, fs, mbgl::Map::RenderMode::Still), async(new uv_async_t) { - source = v8::Persistent::New(source_); + async->data = this; uv_async_init(uv_default_loop(), async, [](uv_async_t *as, int) { reinterpret_cast(as->data)->renderFinished();