In the function "_dbus_connection_remove_watch_unlocked", the first param "connection" type is DBusConnection*.
And then it is passed to the first param "server" of the function "protected_change_watch", but this param has a DBusServer* type.
After explicit type conversion from DBusConnection* to DBusServer*, we will found the pointer DBusServer::watches now points to the address to which DBusConnection::transport points. But this pointer ought to point to the address to which DBusConnection::watches points.
I copied their definition into the attachment.
Created attachment 43909 [details]
This file compares the two structs mentioned.
DBusConnection and DBusServer each has a static function called protected_change_watch; they are not the same (and each is only visible in its own translation unit).
Unless you have a concrete example of code that can call the wrong one (I'm not sure how that could even happen), I think this should be RESOLVED INVALID.
Yeah, you are right, it is not a bug.