From Adrien Destugues <pulkomandy@xxxxxxxxx>:
Adrien Destugues has uploaded this change for review. (
https://review.haiku-os.org/c/haiku/+/3661 ;)
Change subject: Locale Kit: move catalog add-ons loading to early initialization
......................................................................
Locale Kit: move catalog add-ons loading to early initialization
The catalog loading has been done lazily since forever (this code was
imported from OpenTracker). It results in a race condition as explained
in #16670.
Moving the catalog loading earlier in the locale loading process avoids
this problem, since load_add_on is called before the locale roster lock
is used.
This should fix #16670.
---
M src/kits/locale/LocaleRoster.cpp
M src/kits/locale/LocaleRosterData.cpp
M src/kits/locale/MutableLocaleRoster.cpp
3 files changed, 10 insertions(+), 8 deletions(-)
git pull ssh://git.haiku-os.org:22/haiku refs/changes/61/3661/1
diff --git a/src/kits/locale/LocaleRoster.cpp b/src/kits/locale/LocaleRoster.cpp
index dee3807..226c368 100644
--- a/src/kits/locale/LocaleRoster.cpp
+++ b/src/kits/locale/LocaleRoster.cpp
@@ -446,7 +446,7 @@
CatalogAddOnInfo* info
=
(CatalogAddOnInfo*)fData->fCatalogAddOnInfos.ItemAt(i);
- if (!info->MakeSureItsLoaded() || !info->fLanguagesFunc)
+ if (!info->fLanguagesFunc)
continue;
info->fLanguagesFunc(languageList, sigPattern, langPattern,
diff --git a/src/kits/locale/LocaleRosterData.cpp
b/src/kits/locale/LocaleRosterData.cpp
index 0859805..42608ae 100644
--- a/src/kits/locale/LocaleRosterData.cpp
+++ b/src/kits/locale/LocaleRosterData.cpp
@@ -402,8 +402,12 @@
CatalogAddOnInfo* addOnInfo
= new(std::nothrow)
CatalogAddOnInfo(dent->d_name,
addOnFolderName, priority);
- if (addOnInfo)
-
fCatalogAddOnInfos.AddItem((void*)addOnInfo);
+ if (addOnInfo) {
+ if
(addOnInfo->MakeSureItsLoaded())
+
fCatalogAddOnInfos.AddItem((void*)addOnInfo);
+ else
+ delete
addOnInfo;
+ }
}
}
// Bump the dirent-pointer by length of the
dirent just handled:
diff --git a/src/kits/locale/MutableLocaleRoster.cpp
b/src/kits/locale/MutableLocaleRoster.cpp
index 3771e1e..f5d42f0 100644
--- a/src/kits/locale/MutableLocaleRoster.cpp
+++ b/src/kits/locale/MutableLocaleRoster.cpp
@@ -150,8 +150,7 @@
for (int32 i = 0; i < count; ++i) {
CatalogAddOnInfo* info = (CatalogAddOnInfo*)
fData->fCatalogAddOnInfos.ItemAt(i);
- if (info->fName.ICompare(type) != 0 ||
!info->MakeSureItsLoaded()
- || !info->fCreateFunc)
+ if (info->fName.ICompare(type) != 0 || !info->fCreateFunc)
continue;
BCatalogData* catalog = info->fCreateFunc(signature, language);
@@ -189,7 +188,7 @@
CatalogAddOnInfo* info = (CatalogAddOnInfo*)
fData->fCatalogAddOnInfos.ItemAt(i);
- if (!info->MakeSureItsLoaded() || !info->fInstantiateFunc)
+ if (!info->fInstantiateFunc)
continue;
BMessage languages;
if (language != NULL) {
@@ -277,8 +276,7 @@
for (int32 i = 0; i < count; ++i) {
CatalogAddOnInfo* info = (CatalogAddOnInfo*)
fData->fCatalogAddOnInfos.ItemAt(i);
- if (info->MakeSureItsLoaded()
- && info->fInstantiateFunc
+ if (info->fInstantiateFunc
== BPrivate::DefaultCatalog::Instantiate) {
defaultCatalogInfo = info;
break;
--
To view, visit https://review.haiku-os.org/c/haiku/+/3661
To unsubscribe, or for help writing mail filters, visit
https://review.haiku-os.org/settings
Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: If07054077f7dde41cb342a43af2abe8422239b05
Gerrit-Change-Number: 3661
Gerrit-PatchSet: 1
Gerrit-Owner: Adrien Destugues <pulkomandy@xxxxxxxxx>
Gerrit-MessageType: newchange