MIME DB support: avoid static initialization order issue

This commit is contained in:
Ingo Weinhold
2013-08-17 09:22:42 +02:00
parent 77b9f01f9b
commit 418071ba65
+6 -3
View File
@@ -97,12 +97,15 @@ static const directory_which kBaseDirectoryConstants[] = {
}; };
static pthread_once_t sDefaultDatabaseLocationInitOnce = PTHREAD_ONCE_INIT; static pthread_once_t sDefaultDatabaseLocationInitOnce = PTHREAD_ONCE_INIT;
static DatabaseLocation sDefaultDatabaseLocation; static DatabaseLocation* sDefaultDatabaseLocation = NULL;
static void static void
init_default_database_location() init_default_database_location()
{ {
static DatabaseLocation databaseLocation;
sDefaultDatabaseLocation = &databaseLocation;
for (size_t i = 0; for (size_t i = 0;
i < sizeof(kBaseDirectoryConstants) i < sizeof(kBaseDirectoryConstants)
/ sizeof(kBaseDirectoryConstants[0]); i++) { / sizeof(kBaseDirectoryConstants[0]); i++) {
@@ -116,7 +119,7 @@ init_default_database_location()
continue; continue;
directoryPath += "/mime_db"; directoryPath += "/mime_db";
sDefaultDatabaseLocation.AddDirectory(directoryPath); databaseLocation.AddDirectory(directoryPath);
} }
} }
@@ -126,7 +129,7 @@ default_database_location()
{ {
pthread_once(&sDefaultDatabaseLocationInitOnce, pthread_once(&sDefaultDatabaseLocationInitOnce,
&init_default_database_location); &init_default_database_location);
return &sDefaultDatabaseLocation; return sDefaultDatabaseLocation;
} }