ok, I looked closer at what’s going on. When I switch connman receives net.connman.Clock.TimeUpdates
dbus call (from timed I guess). That calls __connman_timeserver_sync()
but it doesn’t do anything because service
and ts_service
point to the same service:
351 if (service == ts_service)
(gdb) bt
#0 __connman_timeserver_sync (default_service=default_service@entry=0x0) at src/timeserver.c:351
#1 0x000000000046b230 in set_property (conn=<optimized out>, msg=0x2e2a6c40, data=<optimized out>) at src/clock.c:287
#2 0x00000000004cde7c in process_message (connection=0x2e1b8810, message=0x2e2a6c40, method=0x4f3ca8 <clock_methods+40>, iface_user_data=0x0) at gdbus/object.c:269
#3 0x0000007681b602ec in _dbus_object_tree_dispatch_and_unlock () from /usr/lib64/libdbus-1.so.3
#4 0x0000007681b4fefc in dbus_connection_dispatch () from /usr/lib64/libdbus-1.so.3
#5 0x00000000004ca9e0 in message_dispatch (data=0x2e1b8810) at gdbus/mainloop.c:80
#6 message_dispatch (data=0x2e1b8810) at gdbus/mainloop.c:67
#7 0x0000007681bfb3c4 in g_main_dispatch (context=context@entry=0x2e1b78a0) at ../glib/gmain.c:3476
#8 0x0000007681bfe648 in g_main_context_dispatch_unlocked (context=0x2e1b78a0) at ../glib/gmain.c:4284
#9 g_main_context_iterate_unlocked (context=0x2e1b78a0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4349
#10 0x0000007681bff0b0 in g_main_loop_run (loop=0x2e18f520) at ../glib/gmain.c:4551
#11 0x0000000000418810 in main (argc=<optimized out>, argv=<optimized out>) at src/main.c:1214
its list of timeservers is empty and yet ntp client is running and keeps synchronizing the local time with the ntp server. How it’s gotten into this state I don’t know. Switching between the services gets around that if (service == ts_service)
condition and things get back to normal. I’ll reduce the reproducibility estimate to, say 20%.