On Fri, 2006-01-06 at 12:38 -0200, Alan Menegotto wrote:
> Look at the code:
> 
> static int __init ipv4_proc_init(void)
> {
>          int rc = 0;
> 
>          if (raw_proc_init())
>                  goto out_raw;
>          if (tcp4_proc_init())
>                  goto out_tcp;
>          if (udp4_proc_init())
>                  goto out_udp;
>          if (fib_proc_init())
>                  goto out_fib;
>          if (ip_misc_proc_init())
>                  goto out_misc;
> out:
>          return rc;
> out_misc:
>          fib_proc_exit();
> out_fib:
>          udp4_proc_exit();
> out_udp:
>          tcp4_proc_exit();
> out_tcp:
>          raw_proc_exit();
> out_raw:
>          rc = -ENOMEM;
>          goto out;
> }
> 
> Calling tcp4_proc_init should go to label out_tcp, which call 
> raw_proc_exit(). Is this correct? If yes, why?

It's symmetric. If raw_proc_init() fails, no cleanup needs to be done so
you go to out_raw. If tcp4_proc_init fails, then raw_proc_init() did
*not* fail and needs to be cleaned up after by calling raw_proc_exit().
etc.

johannes

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to