aboutsummaryrefslogtreecommitdiff
path: root/gdb/serial.h
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2012-06-11 20:36:53 +0000
committerPedro Alves <palves@redhat.com>2012-06-11 20:36:53 +0000
commitddefb60ff89becf2b18d0cf7930358320c6ec0e6 (patch)
tree88f0794b9680f0b82c2def63d8ebb4794c309b58 /gdb/serial.h
parentd5ad6aa5ce9ef3812c344bfebfb27bda36d8cb46 (diff)
downloadgdb-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.h27
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.