You probably didn’t wait long enough. I tried it again and this time it took significantly longer than 5 minutes. It’s basically the next time when connman’s ntp time synchronizer kicks it:
at 14:49:30 I switched off automatic time update and moved the time one hour ahead to 15:49:30
almost 15 minutes later this appears in the connman log:
and the time got reset.The transmit delay is apparently fetched from the incoming ntp packet (without any validation or bounds checking) meaning that it’s pretty much unpredictable. In my case it happens to be 1024 seconds (17 minutes 4 seconds).
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%.
Actually, switching the default service doesn’t quite help. It does help to apply the last Automatic update change but the next change hits the same if (service == ts_service) condition and doesn’t get applied until the default service changes again. That’s 100% reproducible.