Re: [PATCH] staging: speakup: more fixes for init-failure handling.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Dec 19, 2010 at 11:33:42AM +0000, Christopher Brannon wrote:
> Dan Carpenter <error27@xxxxxxxxx> writes:
> 
> > I'm not a big fan of the global variables approach to unwinding...  It
> > makes reading the code much harder.
> 
> What's the best way to do this, while limiting duplication?
> Basically, we have to solve the same problem in two places: unsuccessful
> initialization and successful termination.

Duplication is Ok.  The original resource_cleanup() was obviously much
simpler, I don't think anyone could disagree.  The controversial bit
that I would argue, is that the original unwind code was much simpler as
well.

When I'm reading through the new resource_cleanup() then I have to
wonder if it's Ok to call synth_release() before it's been aquired.  (It
is Ok.)  But if you just unwind at the end of the function then you
only call synth_release() when it's needed, so that question doesn't
arise.

You could also have called speakup_unregister_devsynth() unconditionally
but instead the patch introduces speakup_devsynth_is_registered().
Another option would have been to introduce another variable to track
it.  But all of those options are kind of ugly, spaghetti code...

If you went with a traditional unwind instead you could remove:
	1) All the new variable declarations.
	2) The places which say:  virtual_keyboard_registered = true;
	3) All the if conditions in resource_cleanup()
So sure, it's duplicative, but it's fewer lines of code overall and it's
simpler to read.

regards,
dan carpenter

_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel


[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux