diff options
author | Pedro Alves <palves@redhat.com> | 2012-06-11 20:36:53 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2012-06-11 20:36:53 +0000 |
commit | ddefb60ff89becf2b18d0cf7930358320c6ec0e6 (patch) | |
tree | 88f0794b9680f0b82c2def63d8ebb4794c309b58 /gdb/serial.h | |
parent | d5ad6aa5ce9ef3812c344bfebfb27bda36d8cb46 (diff) | |
download | gdb-ddefb60ff89becf2b18d0cf7930358320c6ec0e6.zip gdb-ddefb60ff89becf2b18d0cf7930358320c6ec0e6.tar.gz gdb-ddefb60ff89becf2b18d0cf7930358320c6ec0e6.tar.bz2 |
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'.
Diffstat (limited to 'gdb/serial.h')
-rw-r--r-- | gdb/serial.h | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/gdb/serial.h b/gdb/serial.h index 8ba8ae6..187ed03 100644 --- a/gdb/serial.h +++ b/gdb/serial.h @@ -37,13 +37,18 @@ typedef void *serial_ttystate; struct serial; /* Try to open NAME. Returns a new `struct serial *' on success, NULL - on failure. Note that some open calls can block and, if possible, - should be written to be non-blocking, with calls to ui_look_hook - so they can be cancelled. An async interface for open could be - added to GDB if necessary. */ + on failure. The new serial object has a reference count of 1. + Note that some open calls can block and, if possible, should be + written to be non-blocking, with calls to ui_look_hook so they can + be cancelled. An async interface for open could be added to GDB if + necessary. */ extern struct serial *serial_open (const char *name); +/* Returns true if SCB is open. */ + +extern int serial_is_open (struct serial *scb); + /* Find an already opened serial stream using a file handle. */ extern struct serial *serial_for_fd (int fd); @@ -52,10 +57,18 @@ extern struct serial *serial_for_fd (int fd); extern struct serial *serial_fdopen (const int fd); -/* Push out all buffers, close the device and destroy SCB. */ +/* Push out all buffers, close the device and unref SCB. */ extern void serial_close (struct serial *scb); +/* Increment reference count of SCB. */ + +extern void serial_ref (struct serial *scb); + +/* Decrement reference count of SCB. */ + +extern void serial_unref (struct serial *scb); + /* Create a pipe, and put the read end in files[0], and the write end in filde[1]. Returns 0 for success, negative value for error (in which case errno contains the error). */ @@ -213,6 +226,10 @@ extern int serial_debug_p (struct serial *scb); struct serial { + /* serial objects are ref counted (but not the underlying + connection, just the object's lifetime in memory). */ + int refcnt; + int fd; /* File descriptor */ /* File descriptor for a separate error stream that should be immediately forwarded to gdb_stderr. This may be -1. |