{"object_kind":"push","event_name":"push","before":"335b799d25ac6369f1338ba166941320710f38cc","after":"9315fe6dff734001721c35a83cd6789f5d8f6475","ref":"refs/heads/main","ref_protected":false,"checkout_sha":"9315fe6dff734001721c35a83cd6789f5d8f6475","message":null,"user_id":1050,"user_name":"Beniamino Galvani","user_username":"bgalvani","user_email":"","user_avatar":"https://gitlab.freedesktop.org/uploads/-/system/user/avatar/1050/avatar.png","project_id":411,"project":{"id":411,"name":"NetworkManager","description":"NetworkManager — network management daemon","web_url":"https://gitlab.freedesktop.org/NetworkManager/NetworkManager","avatar_url":"https://gitlab.freedesktop.org/uploads/-/system/project/avatar/411/nm_logo.png","git_ssh_url":"git@ssh.gitlab.freedesktop.org:NetworkManager/NetworkManager.git","git_http_url":"https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git","namespace":"NetworkManager","visibility_level":20,"path_with_namespace":"NetworkManager/NetworkManager","default_branch":"main","ci_config_path":"","homepage":"https://gitlab.freedesktop.org/NetworkManager/NetworkManager","url":"git@ssh.gitlab.freedesktop.org:NetworkManager/NetworkManager.git","ssh_url":"git@ssh.gitlab.freedesktop.org:NetworkManager/NetworkManager.git","http_url":"https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git"},"commits":[{"id":"b6b4a5073f5eba2ef59e543b461f4693ece0e247","message":"sd-event: recover from skipped GSource check() in event_prepare()\n\nGLib does not guarantee that check() is always called between two\nconsecutive prepare() invocations. When another thread attaches or\nremoves a source with poll fds while the main thread is inside poll(),\nthe GMainContext's poll_changed flag is set and\ng_main_context_check_unlocked() returns immediately without calling\nany source's check() callback.\n\nSince the sd_event GSource adapter maps prepare/check/dispatch to\nsd_event_prepare/sd_event_wait/sd_event_dispatch, which advance an\ninternal state machine (INITIAL -> ARMED -> PENDING -> INITIAL),\na skipped check() leaves sd_event in ARMED state. The next prepare()\nthen hits assert(state == INITIAL), crashing NetworkManager.\n\nThis has been observed during connectivity checks when NetworkManager\ncreates a GResolver, which is implemented by GThreadedResolver and\nuses threads. The worker thread instantiates a GNetworkMonitor, which\nfalls back to the GNetworkMonitorNetlink implementation and attaches\nthe netlink socket fd to the thread-default main context. Since the\nthread doesn't have a default main context, the global main context is\nused.\n\nFix by checking the sd_event state in event_prepare(): if it is not\nINITIAL (i.e. still ARMED from a skipped check()), return FALSE\nwithout calling sd_event_prepare(). The sd_event's epoll fd is\nalready armed from the previous sd_event_prepare(), so poll() will\nwake correctly and event_check() will call sd_event_wait() to\nadvance the state machine through the normal path.\n\nFixes: a8bc65b1a192 ('systemd: integrate sd-event into glib main loop')\n\nhttps://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/work_items/1844\n","title":"sd-event: recover from skipped GSource check() in event_prepare()","timestamp":"2026-07-28T16:29:17+00:00","url":"https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/commit/b6b4a5073f5eba2ef59e543b461f4693ece0e247","author":{"name":"Beniamino Galvani","email":"bgalvani@redhat.com"},"added":[],"modified":["src/core/tests/test-systemd.c","src/libnm-systemd-core/nm-sd.c"],"removed":[]},{"id":"9315fe6dff734001721c35a83cd6789f5d8f6475","message":"merge: branch 'bg/sd-event-bug'\n\nsd-event: recover from skipped GSource check() in event_prepare()\n\nhttps://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/2478","title":"merge: branch 'bg/sd-event-bug'","timestamp":"2026-07-28T16:43:07+00:00","url":"https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/commit/9315fe6dff734001721c35a83cd6789f5d8f6475","author":{"name":"Beniamino Galvani","email":"bgalvani@redhat.com"},"added":[],"modified":["src/core/tests/test-systemd.c","src/libnm-systemd-core/nm-sd.c"],"removed":[]}],"total_commits_count":2,"push_options":{},"repository":{"name":"NetworkManager","url":"git@ssh.gitlab.freedesktop.org:NetworkManager/NetworkManager.git","description":"NetworkManager — network management daemon","homepage":"https://gitlab.freedesktop.org/NetworkManager/NetworkManager","git_http_url":"https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git","git_ssh_url":"git@ssh.gitlab.freedesktop.org:NetworkManager/NetworkManager.git","visibility_level":20}}