2012-06-11 Pedro Alves <palves@redhat.com>
* ser-base.c (run_async_handler_and_reschedule): New. (fd_event, push_event): Use it. * serial.c (serial_open, serial_fdopen_ops): Set the initial reference count to 1. (do_serial_close): Set the bufp field to NULL. Use serial_unref instead of xfree. (serial_is_open, serial_ref, serial_unref): New. * serial.h (serial_open): Adjust comment. (serial_is_open): Declare. (serial_close): Adjust comment. (serial_ref, serial_unref) Declare. (struct serial): New field 'refcnt'.
This commit is contained in:
parent
d5ad6aa5ce
commit
ddefb60ff8
4 changed files with 88 additions and 11 deletions
27
gdb/serial.c
27
gdb/serial.c
|
@ -196,6 +196,7 @@ serial_open (const char *name)
|
|||
scb->bufcnt = 0;
|
||||
scb->bufp = scb->buf;
|
||||
scb->error_fd = -1;
|
||||
scb->refcnt = 1;
|
||||
|
||||
/* `...->open (...)' would get expanded by the open(2) syscall macro. */
|
||||
if ((*scb->ops->open) (scb, open_name))
|
||||
|
@ -245,6 +246,7 @@ serial_fdopen_ops (const int fd, struct serial_ops *ops)
|
|||
scb->bufcnt = 0;
|
||||
scb->bufp = scb->buf;
|
||||
scb->error_fd = -1;
|
||||
scb->refcnt = 1;
|
||||
|
||||
scb->name = NULL;
|
||||
scb->debug_p = 0;
|
||||
|
@ -291,7 +293,10 @@ do_serial_close (struct serial *scb, int really_close)
|
|||
if (scb->name)
|
||||
xfree (scb->name);
|
||||
|
||||
xfree (scb);
|
||||
/* For serial_is_open. */
|
||||
scb->bufp = NULL;
|
||||
|
||||
serial_unref (scb);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -306,6 +311,26 @@ serial_un_fdopen (struct serial *scb)
|
|||
do_serial_close (scb, 0);
|
||||
}
|
||||
|
||||
int
|
||||
serial_is_open (struct serial *scb)
|
||||
{
|
||||
return scb->bufp != NULL;
|
||||
}
|
||||
|
||||
void
|
||||
serial_ref (struct serial *scb)
|
||||
{
|
||||
scb->refcnt++;
|
||||
}
|
||||
|
||||
void
|
||||
serial_unref (struct serial *scb)
|
||||
{
|
||||
--scb->refcnt;
|
||||
if (scb->refcnt == 0)
|
||||
xfree (scb);
|
||||
}
|
||||
|
||||
int
|
||||
serial_readchar (struct serial *scb, int timeout)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue