Bug in devinfo or something wrong with me?
John Baldwin
jhb at FreeBSD.org
Tue Jun 21 15:15:58 GMT 2005
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 at FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve" = http://www.FreeBSD.org
More information about the freebsd-hackers
mailing list