[PATCH] serial moxa: fix leaks of struct tty_driver

From: Kirill Smelkov
Date: Mon Oct 31 2005 - 05:22:30 EST


Fix leak of struct tty_driver in mxser_init & mxser_module_exit

Signed-off-by: Kirill Smelkov <kirr@xxxxxxxxxx>

Fix leak of struct tty_driver in mxser_init & mxser_module_exit

Signed-off-by: Kirill Smelkov <kirr@xxxxxxxxxx>

Index: linux-2.6.14/drivers/char/mxser.c
===================================================================
--- linux-2.6.14.orig/drivers/char/mxser.c 2005-10-31 12:10:11.000000000 +0300
+++ linux-2.6.14/drivers/char/mxser.c 2005-10-31 12:10:47.000000000 +0300
@@ -494,14 +494,18 @@

static void __exit mxser_module_exit(void)
{
- int i, err = 0;
+ int i, err;

if (verbose)
printk(KERN_DEBUG "Unloading module mxser ...\n");

- if ((err |= tty_unregister_driver(mxvar_sdriver)))
+ err = tty_unregister_driver(mxvar_sdriver);
+ if (!err)
+ put_tty_driver(mxvar_sdriver);
+ else
printk(KERN_ERR "Couldn't unregister MOXA Smartio/Industio family serial driver\n");

+
for (i = 0; i < MXSER_BOARDS; i++) {
struct pci_dev *pdev;

@@ -690,7 +694,6 @@
static int mxser_init(void)
{
int i, m, retval, b, n;
- int ret1;
struct pci_dev *pdev = NULL;
int index;
unsigned char busnum, devnum;
@@ -854,14 +857,11 @@
}
#endif

- ret1 = 0;
- if (!(ret1 = tty_register_driver(mxvar_sdriver))) {
- return 0;
- } else
+ retval = tty_register_driver(mxvar_sdriver);
+ if (retval) {
printk(KERN_ERR "Couldn't install MOXA Smartio/Industio family driver !\n");
+ put_tty_driver(mxvar_sdriver);

-
- if (ret1) {
for (i = 0; i < MXSER_BOARDS; i++) {
if (mxsercfg[i].board_type == -1)
continue;
@@ -870,10 +870,10 @@
//todo: release io, vector
}
}
- return -1;
+ return retval;
}

- return (0);
+ return 0;
}

static void mxser_do_softint(void *private_)