[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 8/8] ioreq-server: bring the PCI hotplug controller implementation into Xen
Jan Beulich writes ("RE: [PATCH v4 8/8] ioreq-server: bring the PCI hotplug controller implementation into Xen"): > On 09.04.14 at 15:42, <Paul.Durrant@xxxxxxxxxx> wrote: > > Personally I find using forward jumps to fail labels the most > > readable form of error exit - I wish they were used more widely. > > Interesting - almost everyone/-thing involved in educating me in > programming skills recommended to try to get away without goto > altogether, unless programming Fortran, Basic or some such. I think the hatred of goto is a "lie to children". It is easy to misuse goto and make spaghetti. My view is that use of goto should normally be restricted to certain very specific patterns. Examples: * Providing a uniform cleanup path (eg error exit) from a function * "goto continue_foobar" or "goto break_foobar" for emulating "continue" or "break" on an outer loop from within an inner loop * Usages embedded in structural macros Certainly goto should not be used if another control construct can do the job (without excessive circumlocution or repetition). In libxl we have a few "goto retry_transaction" which I think should be abolished. IME goto should not be used to construct loops. But goto _should_ be used to avoid repetition. The exit path pattern is a particularly good example. In functions which use this pattern: - all variables which refer to resources are initialised to "unallocated" (0, -1, whatever) at declaration - there is only one use of "return" - the return is preceded by a single copy of the cleanup for all the allocated resources The result is that it is difficult to accidentally leak or double-free resources. Failure to initialise one of the resource variables to "empty" is normally detected by the compiler. In this pattern the label should have a conventional name. In libxl we use "out". Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |