|
@@ -890,10 +890,12 @@ static void gs_close(struct tty_struct *tty, struct file *file)
|
|
|
/* wait for write buffer to drain, or */
|
|
|
/* at most GS_CLOSE_TIMEOUT seconds */
|
|
|
if (gs_buf_data_avail(port->port_write_buf) > 0) {
|
|
|
+ spin_unlock_irqrestore(&port->port_lock, flags);
|
|
|
wait_cond_interruptible_timeout(port->port_write_wait,
|
|
|
port->port_dev == NULL
|
|
|
|| gs_buf_data_avail(port->port_write_buf) == 0,
|
|
|
&port->port_lock, flags, GS_CLOSE_TIMEOUT * HZ);
|
|
|
+ spin_lock_irqsave(&port->port_lock, flags);
|
|
|
}
|
|
|
|
|
|
/* free disconnected port on final close */
|