summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/xcb.h15
-rw-r--r--src/xcb_conn.c6
-rw-r--r--src/xcbint.h2
3 files changed, 23 insertions, 0 deletions
diff --git a/src/xcb.h b/src/xcb.h
index 114f2cf..3d193e1 100644
--- a/src/xcb.h
+++ b/src/xcb.h
@@ -334,6 +334,21 @@ const XCBSetup *XCBGetSetup(XCBConnection *c);
int XCBGetFileDescriptor(XCBConnection *c);
/**
+ * @brief Test whether the connection has shut down due to a fatal error.
+ * @param c: The connection.
+ * @return 1 if the connection is in an error state; 0 otherwise.
+ *
+ * Some errors that occur in the context of an XCBConnection
+ * are unrecoverable. When such an error occurs, the
+ * connection is shut down and further operations on the
+ * XCBConnection have no effect.
+ *
+ * @todo Other functions should document the conditions in
+ * which they shut down the connection.
+ */
+int XCBConnectionHasError(XCBConnection *c);
+
+/**
* @brief Connects to the X server.
* @param fd: The file descriptor.
* @param auth_info: Authentication data.
diff --git a/src/xcb_conn.c b/src/xcb_conn.c
index be80bac..b0d727b 100644
--- a/src/xcb_conn.c
+++ b/src/xcb_conn.c
@@ -187,6 +187,12 @@ int XCBGetFileDescriptor(XCBConnection *c)
return c->fd;
}
+int XCBConnectionHasError(XCBConnection *c)
+{
+ /* doesn't need locking because it's read and written atomically. */
+ return c->has_error;
+}
+
XCBConnection *XCBConnectToFD(int fd, XCBAuthInfo *auth_info)
{
XCBConnection* c;
diff --git a/src/xcbint.h b/src/xcbint.h
index 9048e9d..f059522 100644
--- a/src/xcbint.h
+++ b/src/xcbint.h
@@ -142,6 +142,8 @@ void _xcb_ext_destroy(XCBConnection *c);
/* xcb_conn.c */
struct XCBConnection {
+ int has_error;
+
/* constant data */
XCBSetup *setup;
int fd;