Skip to content

Commit 3bc86bd

Browse files
committed
Call system_setting_get_* before calling system_setting_set_change_cb
Based on BT, two issues can be expected. First, a problem could occur in vconf when calling the setting getter while the system is not fully initialized. Alternatively, a deadlock could occur on the same conf when calling the setting getter after registering the changed callback. Since this issue did not occur after a reboot or subsequent routines, it is likely a timing issue due to the callback rather than an initialization issue. Therefore, the problem can be prevented by calling the setting getter before registering the changed callback. ``` crash dump (gdb) bt #0 0x0000ffff94a13524 in __GI___poll (fds=0xfffff49d3830, nfds=1, timeout=<optimized out>) at ../sysdeps/unix/sysv/linux/poll.c:41 #1 0x0000ffff938f44e8 in ?? () from /lib64/libbuxton2.so.1 flutter-tizen#2 0x0000ffff938f6ac0 in buxton_get_value_sync () from /lib64/libbuxton2.so.1 flutter-tizen#3 0x0000ffff93703af8 in ?? () from /lib64/libvconf.so.0 flutter-tizen#4 0x0000ffff937052c4 in vconf_get_int () from /lib64/libvconf.so.0 flutter-tizen#5 0x0000ffff8c1b9604 in ?? () from /lib64/libcapi-system-system-settings.so.0 flutter-tizen#6 0x0000ffff8c1b390c in system_settings_get_value_int () from /lib64/libcapi-system-system-settings.so.0 flutter-tizen#7 0x0000ffff8c2ec3d0 in ?? () from /usr/apps/org.tizen.homescreen/bin/../lib/libflutter_tizen_common.so flutter-tizen#8 0x0000ffff8c2ec330 in ?? () from /usr/apps/org.tizen.homescreen/bin/../lib/libflutter_tizen_common.so flutter-tizen#9 0x0000ffff8c2f538c in ?? () from /usr/apps/org.tizen.homescreen/bin/../lib/libflutter_tizen_common.so flutter-tizen#10 0x0000ffff8c2f3d70 in FlutterDesktopViewCreateFromNewWindow () from /usr/apps/org.tizen.homescreen/bin/../lib/libflutter_tizen_common.so flutter-tizen#11 0x0000ffff94fd8ff4 in ?? () from /usr/apps/org.tizen.homescreen/bin/runner flutter-tizen#12 0x0000ffff94fd8df0 in ?? () from /usr/apps/org.tizen.homescreen/bin/runner flutter-tizen#13 0x0000ffff918b3df8 in ?? () from /usr/lib64/libcapi-appfw-application.so.0 flutter-tizen#14 0x0000ffff919efc6c in tizen_cpp::AppCoreBase::Init(int, char**) () from /lib64/libapp-core-cpp.so.1 flutter-tizen#15 0x0000ffff919efd24 in tizen_cpp::AppCoreBase::Run(int, char**) () from /lib64/libapp-core-cpp.so.1 flutter-tizen#16 0x0000ffff91a34bdc in tizen_cpp::AppCoreUiBase::DoRun(int, char**) () from /lib64/libapp-core-ui-cpp.so.1 flutter-tizen#17 0x0000ffff91a34f4c in tizen_cpp::AppCoreUiBase::Impl::Run(int, char**) () from /lib64/libapp-core-ui-cpp.so.1 flutter-tizen#18 0x0000ffff918b3fa8 in ui_app_main () from /usr/lib64/libcapi-appfw-application.so.0 flutter-tizen#19 0x0000ffff94fd93a0 in ?? () from /usr/apps/org.tizen.homescreen/bin/runner flutter-tizen#20 0x0000ffff94fd8a8c in main () from /usr/apps/org.tizen.homescreen/bin/runner flutter-tizen#21 0x0000aaaae7065bac in launchpad::loader::LaunchpadLoader::OnTerminate(int, char**) () flutter-tizen#22 0x0000ffff94e2a030 in launchpad_loader_main () from /lib64/liblaunchpad.so.0 flutter-tizen#23 0x0000aaaae7063b58 in launchpad::loader::LaunchpadLoader::Run() () flutter-tizen#24 0x0000aaaae7063500 in main () ```
1 parent 8d36c27 commit 3bc86bd

2 files changed

Lines changed: 29 additions & 17 deletions

File tree

flutter/shell/platform/tizen/channels/settings_channel.cc

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44

55
#include "settings_channel.h"
66

7-
#include <system/system_settings.h>
8-
97
#include "flutter/shell/platform/common/json_message_codec.h"
108

119
namespace flutter {
@@ -25,21 +23,26 @@ SettingsChannel::SettingsChannel(BinaryMessenger* messenger)
2523
messenger,
2624
kChannelName,
2725
&JsonMessageCodec::GetInstance())) {
26+
SetUpLocaleTimeFormat();
27+
SetUpTextScaleFactor();
28+
SendSettingsEvent();
29+
2830
system_settings_set_changed_cb(
2931
SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR,
3032
[](system_settings_key_e key, void* user_data) -> void {
3133
auto* self = static_cast<SettingsChannel*>(user_data);
34+
self->SetUpLocaleTimeFormat();
3235
self->SendSettingsEvent();
3336
},
3437
this);
3538
system_settings_set_changed_cb(
3639
SYSTEM_SETTINGS_KEY_FONT_SIZE,
3740
[](system_settings_key_e key, void* user_data) -> void {
3841
auto* self = static_cast<SettingsChannel*>(user_data);
42+
self->SetUpTextScaleFactor();
3943
self->SendSettingsEvent();
4044
},
4145
this);
42-
SendSettingsEvent();
4346
}
4447

4548
SettingsChannel::~SettingsChannel() {
@@ -51,23 +54,24 @@ SettingsChannel::~SettingsChannel() {
5154
void SettingsChannel::SendSettingsEvent() {
5255
rapidjson::Document event(rapidjson::kObjectType);
5356
rapidjson::MemoryPoolAllocator<>& allocator = event.GetAllocator();
54-
event.AddMember(kTextScaleFactorKey, GetTextScaleFactor(), allocator);
55-
event.AddMember(kAlwaysUse24HourFormatKey, Prefer24HourTime(), allocator);
57+
58+
event.AddMember(kTextScaleFactorKey, text_scale_factor_, allocator);
59+
event.AddMember(kAlwaysUse24HourFormatKey, locale_time_format_, allocator);
5660
event.AddMember(kPlatformBrightnessKey, "light", allocator);
5761
channel_->Send(event);
5862
}
5963

60-
bool SettingsChannel::Prefer24HourTime() {
64+
bool SettingsChannel::SetUpLocaleTimeFormat() {
6165
bool value = false;
6266
if (system_settings_get_value_bool(
6367
SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR, &value) ==
6468
SYSTEM_SETTINGS_ERROR_NONE) {
65-
return value;
69+
locale_time_format_ = value;
6670
}
67-
return false;
71+
return locale_time_format_;
6872
}
6973

70-
float SettingsChannel::GetTextScaleFactor() {
74+
float SettingsChannel::SetUpTextScaleFactor() {
7175
const float small = 0.8;
7276
const float normal = 1.0;
7377
const float large = 1.5;
@@ -79,18 +83,23 @@ float SettingsChannel::GetTextScaleFactor() {
7983
SYSTEM_SETTINGS_ERROR_NONE) {
8084
switch (value) {
8185
case SYSTEM_SETTINGS_FONT_SIZE_SMALL:
82-
return small;
86+
text_scale_factor_ = small;
87+
break;
8388
case SYSTEM_SETTINGS_FONT_SIZE_LARGE:
84-
return large;
89+
text_scale_factor_ = large;
90+
break;
8591
case SYSTEM_SETTINGS_FONT_SIZE_HUGE:
86-
return huge;
92+
text_scale_factor_ = huge;
93+
break;
8794
case SYSTEM_SETTINGS_FONT_SIZE_GIANT:
88-
return giant;
95+
text_scale_factor_ = giant;
96+
break;
8997
default:
90-
return normal;
98+
text_scale_factor_ = normal;
99+
break;
91100
}
92101
}
93-
return normal;
102+
return text_scale_factor_;
94103
}
95104

96105
} // namespace flutter

flutter/shell/platform/tizen/channels/settings_channel.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#ifndef EMBEDDER_SETTINGS_CHANNEL_H_
66
#define EMBEDDER_SETTINGS_CHANNEL_H_
77

8+
#include <system/system_settings.h>
89
#include <memory>
910

1011
#include "flutter/shell/platform/common/client_wrapper/include/flutter/basic_message_channel.h"
@@ -20,10 +21,12 @@ class SettingsChannel {
2021

2122
private:
2223
void SendSettingsEvent();
23-
bool Prefer24HourTime();
24-
float GetTextScaleFactor();
24+
bool SetUpLocaleTimeFormat();
25+
float SetUpTextScaleFactor();
2526

2627
std::unique_ptr<BasicMessageChannel<rapidjson::Document>> channel_;
28+
bool locale_time_format_ = false;
29+
float text_scale_factor_ = SYSTEM_SETTINGS_FONT_SIZE_NORMAL;
2730
};
2831

2932
} // namespace flutter

0 commit comments

Comments
 (0)