On 03/04/19 18:50, Markus Armbruster wrote: > Alright, we can call object_get_class(dev_obj)->unparent(dev_obj). > > Final complication: if I call just that, the device's reference counter > goes down to zero in the middle of device_unparent(), and we use after > free. So I bracket he call with object_ref() and object_unref().
I don't think that requiring such a bracketing is necessarily a problem. I vaguely remember reviewing a kernel patch 6 or so years ago where the patch used the same idea, with those "get" and "put" functions (the bug the patch was fixing was that the last reference was "temporarily" lost mid-operation). So perhaps this can be addressed, for the general case, by extending the documentation of device_unparent(). (The function has no documentation at all, at the moment.) Thanks Laszlo