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>
index | next in thread | previous in thread | raw e-mail
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
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200506211116.32625.jhb>
