Date: Tue, 21 Jun 2005 11:16:31 -0400 From: John Baldwin <jhb@FreeBSD.org> To: freebsd-hackers@freebsd.org Cc: Stefan Farfeleder <stefan@fafoe.narf.at>, Juho Vuori <juho.vuori@kepa.fi> Subject: Re: Bug in devinfo or something wrong with me? Message-ID: <200506211116.32625.jhb@FreeBSD.org> In-Reply-To: <20050516125109.GF33622@wombat.fafoe.narf.at> References: <42887FEE.3000705@kepa.fi> <20050516125109.GF33622@wombat.fafoe.narf.at>
next in thread | previous in thread | raw e-mail | index | archive | help
On Monday 16 May 2005 08:51 am, Stefan Farfeleder wrote: > On Mon, May 16, 2005 at 02:11:42PM +0300, Juho Vuori wrote: > > The below included simple program reliably printfs "error 4\n" on > > 5.4-RELEASE. Am I understanding something wrong or is this a bug in > > libdevinfo? > > There is indeed a bug in libdevinfo. > > > To continue on this however, if you put say sleep(5) between > > devinfo_free() and the second devinfo_init() and manage to change the > > device configuration during the sleep (tested with pluggin in/out a USB > > memory), the program terminates with no errors. I've run into other > > oddities with devinfo as well, but in much more complex situations so > > they might just as well be variations of this simple example. > > > > if (devinfo_init()) { > > devinfo_init() initialises the devinfo_dev tailq, devinfo_generation and > sets devinfo_initted to 1. > > > devinfo_free(); > > devinfo_free() clears devinfo_dev and sets devinfo_initted to 0 but > devinfo_generation keeps its value. > > > if (devinfo_init()) { > > Now devinfo_dev doesn't get filled because ubus.ub_generation == > devinfo_generation. > > Here is a patch that resets devinfo_generation to 0 in devinfo_free(). > The whole file can probably be simplified a bit due to this bug. > > Stefan I think the intent is actually so that you can call devinfo_init() periodically without calling devinfo_free() to make sure the tree is up to date. However, the generation should still be cleared when free() is called. IOW, if you wanted to have a program that would poll the kernel each second to get the current tree, it would call devinfo_init() in a loop and only call devinfo_free() at program exit. This would let devinfo_init() cache data if the device tree doesn't change. I'll try to get the patch into the tree. -- John Baldwin <jhb@FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/ "Power Users Use the Power to Serve" = http://www.FreeBSD.org
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200506211116.32625.jhb>