Messages in this thread | | | Date | Wed, 30 Apr 2008 14:52:05 -0700 (PDT) | From | Trent Piepho <> | Subject | Re: [v4l-dvb-maintainer] [patch, -git] drivers/media build fix for modular builds |
| |
On Wed, 30 Apr 2008, Andrew Morton wrote: > Does this make it feel better? > > --- a/drivers/media/video/tuner-core.c~a > +++ a/drivers/media/video/tuner-core.c > @@ -40,11 +40,11 @@ > typeof(&FUNCTION) __a = symbol_request(FUNCTION); \ > if (__a) { \ > __r = (int) __a(ARGS); \ > + symbol_put(FUNCTION); \ > } else { \ > printk(KERN_ERR "TUNER: Unable to find " \ > "symbol "#FUNCTION"()\n"); \ > } \ > - symbol_put(FUNCTION); \ > __r; \ > })
Should the symbol_put be done at all? When I wrote the code this is based on, it would check if FUNCTION failed or not. If it failed, the symbol was put. But if it worked, then one was returned a handle into FUNCTION's module, and so the symbol was not put. If it was, the module's refcount would be zero but the caller would have a handle into the module.
So if FUNCTION does anything that creates references to the module, and it doesn't inc it's own refcount, then the symbol_put shouldn't be done.
| |