|
@@ -1363,7 +1363,7 @@ static void hso_serial_close(struct tty_struct *tty, struct file *filp)
|
|
/* reset the rts and dtr */
|
|
/* reset the rts and dtr */
|
|
/* do the actual close */
|
|
/* do the actual close */
|
|
serial->open_count--;
|
|
serial->open_count--;
|
|
- kref_put(&serial->parent->ref, hso_serial_ref_free);
|
|
|
|
|
|
+
|
|
if (serial->open_count <= 0) {
|
|
if (serial->open_count <= 0) {
|
|
serial->open_count = 0;
|
|
serial->open_count = 0;
|
|
spin_lock_irq(&serial->serial_lock);
|
|
spin_lock_irq(&serial->serial_lock);
|
|
@@ -1383,6 +1383,8 @@ static void hso_serial_close(struct tty_struct *tty, struct file *filp)
|
|
usb_autopm_put_interface(serial->parent->interface);
|
|
usb_autopm_put_interface(serial->parent->interface);
|
|
|
|
|
|
mutex_unlock(&serial->parent->mutex);
|
|
mutex_unlock(&serial->parent->mutex);
|
|
|
|
+
|
|
|
|
+ kref_put(&serial->parent->ref, hso_serial_ref_free);
|
|
}
|
|
}
|
|
|
|
|
|
/* close the requested serial port */
|
|
/* close the requested serial port */
|