On Thursday, May 31, 2012 4:19:46 am Norbert Koch wrote: > Hello, > > I have written a bus device driver > which itself is a pci driver. Child devices > may allocate resources from my bus device. > > My bus device does the usual > management of resources through > the children's ivars. > > My question is this: > > The bus device mallocs the > children's ivars in bus_add_child > and frees the ivars in either > bus_detach or bus_child_detached. > > The children are added in identify > methods through BUS_ADD_CHILD. > > As I understand the code the bus device's > bus_child_detached method is called > in device_delete_child only if > the child device is already attached. > > So, there seems to be a memory leak if > I delete the child device in either > identify or probe. > > My current solution (not tested yet) is to > explicitly call BUS_CHILD_DETACHED > in the child device's code before > calling device_delete_child. > > Is this the correct way or is > there a more elegant/cleaner solution? > > I expected to find something like a > BUS_DELETE_CHILD method.
We should perhaps have a BUS_CHILD_DELETED? I think that would do what you want. We could maybe add a BUS_DELETE_CHILD(), but it would be assymmetric to have device_delete_child() call BUS_DELETE_CHILD() when device_add_child() does not call BUS_ADD_CHILD(). (Instead, BUS_ADD_CHILD() calls device_add_child, which is perhaps wrong.) For now I would change your child code to call a wrapper foo_delete_child() function from your child drivers directly rather than calling device_delete_child(). foo_delete_child() can do its cleanup and then call device_delete_child(). -- John Baldwin _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"