aboutsummaryrefslogtreecommitdiff
path: root/src/lib/net/alertsock.h
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2018-06-28 08:49:07 -0400
committerNick Mathewson <nickm@torproject.org>2018-06-28 08:49:07 -0400
commit544ab27a949406628809869111b7288017a5bcb1 (patch)
tree911f21717353327dad7ae296cef4ca0a893839a8 /src/lib/net/alertsock.h
parent0b7452eeb2f2dee7acefee2d3ca2cb402a877ea1 (diff)
downloadtor-544ab27a949406628809869111b7288017a5bcb1.tar.gz
tor-544ab27a949406628809869111b7288017a5bcb1.zip
Extract the alert-socket code into lib/net.
This code was in compat_threads, since it was _used_ for efficiently notifying the main libevent thread from another thread. But in spite of its usage, it's fundamentally a part of the network code.
Diffstat (limited to 'src/lib/net/alertsock.h')
-rw-r--r--src/lib/net/alertsock.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/lib/net/alertsock.h b/src/lib/net/alertsock.h
new file mode 100644
index 0000000000..026a15cad0
--- /dev/null
+++ b/src/lib/net/alertsock.h
@@ -0,0 +1,39 @@
+/* Copyright (c) 2003-2004, Roger Dingledine
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2018, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#ifndef TOR_ALERTSOCK_H
+#define TOR_ALERTSOCK_H
+
+#include "orconfig.h"
+#include "lib/net/nettypes.h"
+#include "lib/cc/torint.h"
+
+/** Helper type used to manage waking up the main thread while it's in
+ * the libevent main loop. Used by the work queue code. */
+typedef struct alert_sockets_t {
+ /* XXXX This structure needs a better name. */
+ /** Socket that the main thread should listen for EV_READ events on.
+ * Note that this socket may be a regular fd on a non-Windows platform.
+ */
+ tor_socket_t read_fd;
+ /** Socket to use when alerting the main thread. */
+ tor_socket_t write_fd;
+ /** Function to alert the main thread */
+ int (*alert_fn)(tor_socket_t write_fd);
+ /** Function to make the main thread no longer alerted. */
+ int (*drain_fn)(tor_socket_t read_fd);
+} alert_sockets_t;
+
+/* Flags to disable one or more alert_sockets backends. */
+#define ASOCKS_NOEVENTFD2 (1u<<0)
+#define ASOCKS_NOEVENTFD (1u<<1)
+#define ASOCKS_NOPIPE2 (1u<<2)
+#define ASOCKS_NOPIPE (1u<<3)
+#define ASOCKS_NOSOCKETPAIR (1u<<4)
+
+int alert_sockets_create(alert_sockets_t *socks_out, uint32_t flags);
+void alert_sockets_close(alert_sockets_t *socks);
+
+#endif