uclient: cancel state change timeout in uclient_disconnect()
authorMatthias Schiffer <mschiffer@universe-factory.net>
Fri, 24 Feb 2023 21:25:07 +0000 (22:25 +0100)
committerMatthias Schiffer <mschiffer@universe-factory.net>
Thu, 13 Apr 2023 18:45:22 +0000 (20:45 +0200)
commit007d945467499f43656b141171d31f5643b83a6c
tree16b52ee337ac90998c78752355f1b0a08a3ca41c
parent644d3c7e13c6a64bf5cb628137ee5bd4dada4b74
uclient: cancel state change timeout in uclient_disconnect()

When the uloop is ended right after the state change timeout has been
armed, the timeout will never be cancelled, without a way for the
libuclient user to clean up. When uclient_free() is then called on the
uclient context while the uloop is still live, the entry in uloop's timeout
list will be dangling, often resulting in a segfault when new timeouts are
added or the timeout list is cleaned up in uloop_done().

Fix this by cancelling the timeout in uclient_disconnect().

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
uclient.c