forked from Imagelibrary/rtems
2001-10-11 Mike Siers <mikes@poliac.com>
* libc/termios.c: Fixed a memory leak in the termios software. Basically the tty open function was allocating an input raw buffer, an output raw buffer, and a cooked buffer that were not getting released. I have attached a patch for the latest snapshot. The patch also has a fix to ensure the tty link list is updated correctly when a tty is closed.
This commit is contained in:
@@ -324,19 +324,30 @@ rtems_termios_close (void *arg)
|
|||||||
drainOutput (tty);
|
drainOutput (tty);
|
||||||
if (tty->device.lastClose)
|
if (tty->device.lastClose)
|
||||||
(*tty->device.lastClose)(tty->major, tty->minor, arg);
|
(*tty->device.lastClose)(tty->major, tty->minor, arg);
|
||||||
if (tty->forw == NULL)
|
if (tty->forw == NULL) {
|
||||||
rtems_termios_ttyTail = tty->back;
|
rtems_termios_ttyTail = tty->back;
|
||||||
else
|
if ( rtems_termios_ttyTail != NULL ) {
|
||||||
|
rtems_termios_ttyTail->forw = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
tty->forw->back = tty->back;
|
tty->forw->back = tty->back;
|
||||||
if (tty->back == NULL)
|
}
|
||||||
|
if (tty->back == NULL) {
|
||||||
rtems_termios_ttyHead = tty->forw;
|
rtems_termios_ttyHead = tty->forw;
|
||||||
else
|
if ( rtems_termios_ttyHead != NULL ) {
|
||||||
|
rtems_termios_ttyHead->back = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
tty->back->forw = tty->forw;
|
tty->back->forw = tty->forw;
|
||||||
|
}
|
||||||
rtems_semaphore_delete (tty->isem);
|
rtems_semaphore_delete (tty->isem);
|
||||||
rtems_semaphore_delete (tty->osem);
|
rtems_semaphore_delete (tty->osem);
|
||||||
rtems_semaphore_delete (tty->rawOutBufSemaphore);
|
rtems_semaphore_delete (tty->rawOutBufSemaphore);
|
||||||
if (!tty->device.pollRead)
|
if (!tty->device.pollRead)
|
||||||
rtems_semaphore_delete (tty->rawInBufSemaphore);
|
rtems_semaphore_delete (tty->rawInBufSemaphore);
|
||||||
|
free (tty->cbuf);
|
||||||
free (tty);
|
free (tty);
|
||||||
}
|
}
|
||||||
rtems_semaphore_release (rtems_termios_ttyMutex);
|
rtems_semaphore_release (rtems_termios_ttyMutex);
|
||||||
|
|||||||
Reference in New Issue
Block a user