On Sat, 17 Jun 2006 21:47:58 -0700
Pete Zaitcev <[EMAIL PROTECTED]> wrote:

| On Sat, 17 Jun 2006 22:09:49 -0300, "Luiz Fernando N. Capitulino" <[EMAIL 
PROTECTED]> wrote:
| 
| > | Greg, does this look sane to you?
| 
| >   1. While you're are at it, please, create a new function to kill
| >      'port', because now the code in port_release() and destroy_serial()
| >      does exactly the same thing (to kill 'port').
| > 
| >   2. Just to be safe, do a 'port = NULL' after the call to kfree()
| 
| So, I refactored it according to #1, but I'd rather have you send me
| a patch which implements #2. It just makes no sense to me, I cannot
| understand what you could possibly want here.

 Consistency. Several functions wich deals with 'port' checks whether
it's NULL before dereferencing it.

 The loop which calls device_unregister() in destroy_serial() does it
only for non-fake ports.

 It's a minor issue anyway, as fake ports are not registered with the
tty layer.

| I allso threw in the patch for visor leaks. I sent it to Greg before,
| but typoed the list name at cc:

 Nice, but the changelog would make things cleaner.

| P.S. Greg was up to his neck in FreedomHEC activities, as I gather from
| his blog, and it was unfortunate. Linus released 2.6.17 today... We better
| hurry with the agreement about this patch of we miss the merge window.

 We're ok I think. This is the kind of change that's acceptable for -rc2,
or even -rc3.

| @@ -764,8 +776,14 @@ static int generic_startup(struct usb_se
|  
|       for (i = 0; i < serial->num_ports; ++i) {
|               priv = kzalloc (sizeof(*priv), GFP_KERNEL);
| -             if (!priv)
| +             if (!priv) {
| +                     while (i-- != 0) {
| +                             priv = 
usb_get_serial_port_data(serial->port[i]);
| +                             usb_set_serial_port_data(serial->port[i], NULL);
| +                             kfree(priv);
| +                     }
|                       return -ENOMEM;
| +             }

 The while() body takes more than 80 columns. Moving it to a goto label
seems better a bit, IMHO.

|               spin_lock_init(&priv->lock);
|               usb_set_serial_port_data(serial->port[i], priv);
|       }
| @@ -877,7 +895,18 @@ static int clie_5_attach (struct usb_ser
|  
|  static void visor_shutdown (struct usb_serial *serial)
|  {
| +     struct visor_private *priv;
| +     int i;
| +
|       dbg("%s", __FUNCTION__);
| +
| +     for (i = 0; i < serial->num_ports; i++) {
| +             priv = usb_get_serial_port_data(serial->port[i]);
| +             if (priv) {
| +                     usb_set_serial_port_data(serial->port[i], NULL);
| +                     kfree(priv);
| +             }
| +     }
|  }

 Hmm, can't you call visor_shutdown() in generic_startup() if
kzalloc() fails?

 To be honest, I don't like that 'promiscuous' way of ordinary
functions like generic_startup() calling a callback like
visor_shutdown() to do its cleanup work. Maybe a
__visor_kill_priv() to do the real work sounds better.

-- 
Luiz Fernando N. Capitulino


_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to