Skip to content

Call system_setting_get_* before calling system_setting_set_change_cb#159

Open
JSUYA wants to merge 2 commits intoflutter-tizen:masterfrom
JSUYA:prevent_setting_deadlock
Open

Call system_setting_get_* before calling system_setting_set_change_cb#159
JSUYA wants to merge 2 commits intoflutter-tizen:masterfrom
JSUYA:prevent_setting_deadlock

Conversation

@JSUYA
Copy link
Member

@JSUYA JSUYA commented Mar 6, 2026

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.

A core dump occurs once when the home app made with flutter is first run with the system (it does not occur after rebooting).

 (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
 #2  0x0000ffff938f6ac0 in buxton_get_value_sync () from /lib64/libbuxton2.so.1
 #3  0x0000ffff93703af8 in ?? () from /lib64/libvconf.so.0
 #4  0x0000ffff937052c4 in vconf_get_int () from /lib64/libvconf.so.0
 #5  0x0000ffff8c1b9604 in ?? () from /lib64/libcapi-system-system-settings.so.0
 #6  0x0000ffff8c1b390c in system_settings_get_value_int ()
    from /lib64/libcapi-system-system-settings.so.0
 #7  0x0000ffff8c2ec3d0 in ?? ()
    from /usr/apps/org.tizen.homescreen/bin/../lib/libflutter_tizen_common.so
 #8  0x0000ffff8c2ec330 in ?? ()
    from /usr/apps/org.tizen.homescreen/bin/../lib/libflutter_tizen_common.so
 #9  0x0000ffff8c2f538c in ?? ()
    from /usr/apps/org.tizen.homescreen/bin/../lib/libflutter_tizen_common.so
 #10 0x0000ffff8c2f3d70 in FlutterDesktopViewCreateFromNewWindow ()
    from /usr/apps/org.tizen.homescreen/bin/../lib/libflutter_tizen_common.so
 #11 0x0000ffff94fd8ff4 in ?? () from /usr/apps/org.tizen.homescreen/bin/runner
 #12 0x0000ffff94fd8df0 in ?? () from /usr/apps/org.tizen.homescreen/bin/runner
 #13 0x0000ffff918b3df8 in ?? () from /usr/lib64/libcapi-appfw-application.so.0
 #14 0x0000ffff919efc6c in tizen_cpp::AppCoreBase::Init(int, char**) ()
    from /lib64/libapp-core-cpp.so.1
 #15 0x0000ffff919efd24 in tizen_cpp::AppCoreBase::Run(int, char**) ()
    from /lib64/libapp-core-cpp.so.1
 #16 0x0000ffff91a34bdc in tizen_cpp::AppCoreUiBase::DoRun(int, char**) ()
    from /lib64/libapp-core-ui-cpp.so.1
 #17 0x0000ffff91a34f4c in tizen_cpp::AppCoreUiBase::Impl::Run(int, char**) ()
    from /lib64/libapp-core-ui-cpp.so.1
 #18 0x0000ffff918b3fa8 in ui_app_main ()
    from /usr/lib64/libcapi-appfw-application.so.0
 #19 0x0000ffff94fd93a0 in ?? () from /usr/apps/org.tizen.homescreen/bin/runner
 #20 0x0000ffff94fd8a8c in main ()
    from /usr/apps/org.tizen.homescreen/bin/runner
 #21 0x0000aaaae7065bac in launchpad::loader::LaunchpadLoader::OnTerminate(int, char**) ()
 #22 0x0000ffff94e2a030 in launchpad_loader_main ()
    from /lib64/liblaunchpad.so.0
 #23 0x0000aaaae7063b58 in launchpad::loader::LaunchpadLoader::Run() ()
 #24 0x0000aaaae7063500 in main ()

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 ()
```
@JSUYA JSUYA self-assigned this Mar 6, 2026
@JSUYA JSUYA added the bug Something isn't working label Mar 6, 2026
Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request refactors the SettingsChannel to address a potential race condition by fetching initial system settings for time format and font size before registering change notification callbacks. The settings are now cached in member variables, which are updated on initialization and when callbacks are triggered. This change appears to correctly resolve the issue described. My feedback focuses on improving the readability of the newly introduced helper functions to better align with their purpose.

@JSUYA JSUYA closed this Mar 6, 2026
@JSUYA JSUYA deleted the prevent_setting_deadlock branch March 6, 2026 10:54
@JSUYA JSUYA restored the prevent_setting_deadlock branch March 6, 2026 10:54
@JSUYA JSUYA reopened this Mar 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant