From e9cf787779d26333090e66d923ea04ee7b81d857 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Wed, 8 Mar 2017 14:50:49 -0800 Subject: [PATCH] [darwin] Use explicit initialization rather than global static variables for the default RunLoop When linking Mapbox GL as a static library, the object file (MGLFoundation.o) containing the global static variable initialization was not linked into the resulting binary since it was not referenced. This resulted in the RunLoop not being initialized in the main thread. Reverts 03a14ff0003e976a4ded70d284bc80adf54bc6c9 --- platform/darwin/src/MGLFoundation.mm | 4 +++- platform/darwin/src/MGLFoundation_Private.h | 2 +- platform/darwin/src/MGLOfflineStorage.mm | 3 +++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/platform/darwin/src/MGLFoundation.mm b/platform/darwin/src/MGLFoundation.mm index 1cc56de29..5cda1dced 100644 --- a/platform/darwin/src/MGLFoundation.mm +++ b/platform/darwin/src/MGLFoundation.mm @@ -1,4 +1,6 @@ #import "MGLFoundation_Private.h" /// Initializes the run loop shim that lives on the main thread. -mbgl::util::RunLoop mgl_runLoop; +void MGLInitializeRunLoop() { + static mbgl::util::RunLoop runLoop; +} diff --git a/platform/darwin/src/MGLFoundation_Private.h b/platform/darwin/src/MGLFoundation_Private.h index 940bb1df6..f23162875 100644 --- a/platform/darwin/src/MGLFoundation_Private.h +++ b/platform/darwin/src/MGLFoundation_Private.h @@ -2,4 +2,4 @@ #include -extern mbgl::util::RunLoop mgl_runLoop; +void MGLInitializeRunLoop(); diff --git a/platform/darwin/src/MGLOfflineStorage.mm b/platform/darwin/src/MGLOfflineStorage.mm index 9cb472ce5..b65932c6e 100644 --- a/platform/darwin/src/MGLOfflineStorage.mm +++ b/platform/darwin/src/MGLOfflineStorage.mm @@ -1,5 +1,6 @@ #import "MGLOfflineStorage_Private.h" +#import "MGLFoundation_Private.h" #import "MGLAccountManager_Private.h" #import "MGLGeometry_Private.h" #import "MGLNetworkConfiguration.h" @@ -170,6 +171,8 @@ NSString * const MGLOfflinePackMaximumCountUserInfoKey = MGLOfflinePackUserInfoK } - (instancetype)init { + MGLInitializeRunLoop(); + if (self = [super init]) { NSURL *cacheURL = [[self class] cacheURLIncludingSubdirectory:YES]; NSString *cachePath = cacheURL.path ?: @"";