aboutsummaryrefslogtreecommitdiff
path: root/evbuffer-internal.h
diff options
context:
space:
mode:
Diffstat (limited to 'evbuffer-internal.h')
-rw-r--r--evbuffer-internal.h128
1 files changed, 35 insertions, 93 deletions
diff --git a/evbuffer-internal.h b/evbuffer-internal.h
index cf4bddc..f9dcc06 100644
--- a/evbuffer-internal.h
+++ b/evbuffer-internal.h
@@ -24,17 +24,15 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef EVBUFFER_INTERNAL_H_INCLUDED_
-#define EVBUFFER_INTERNAL_H_INCLUDED_
+#ifndef _EVBUFFER_INTERNAL_H_
+#define _EVBUFFER_INTERNAL_H_
#ifdef __cplusplus
extern "C" {
#endif
#include "event2/event-config.h"
-#include "evconfig-private.h"
#include "event2/util.h"
-#include "event2/event_struct.h"
#include "util-internal.h"
#include "defer-internal.h"
@@ -43,7 +41,7 @@ extern "C" {
* arguments. */
#define EVBUFFER_CB_NODEFER 2
-#ifdef _WIN32
+#ifdef WIN32
#include <winsock2.h>
#endif
#include <sys/queue.h>
@@ -51,7 +49,7 @@ extern "C" {
/* Minimum allocation for a chain. We define this so that we're burning no
* more than 5% of each allocation on overhead. It would be nice to lose even
* less space, though. */
-#if EVENT__SIZEOF_VOID_P < 8
+#if _EVENT_SIZEOF_VOID_P < 8
#define MIN_BUFFER_SIZE 512
#else
#define MIN_BUFFER_SIZE 1024
@@ -61,7 +59,7 @@ extern "C" {
* when bytes are added to or removed from the evbuffer. */
struct evbuffer_cb_entry {
/** Structures to implement a doubly-linked queue of callbacks */
- LIST_ENTRY(evbuffer_cb_entry) next;
+ TAILQ_ENTRY(evbuffer_cb_entry) next;
/** The callback function to invoke when this callback is called.
If EVBUFFER_CB_OBSOLETE is set in flags, the cb_obsolete field is
valid; otherwise, cb_func is valid. */
@@ -108,7 +106,7 @@ struct evbuffer {
* tried to invoke callbacks. */
size_t n_del_for_cb;
-#ifndef EVENT__DISABLE_THREAD_SUPPORT
+#ifndef _EVENT_DISABLE_THREAD_SUPPORT
/** A lock used to mediate access to this buffer. */
void *lock;
#endif
@@ -127,7 +125,7 @@ struct evbuffer {
* overflows when we have mutually recursive callbacks, and for
* serializing callbacks in a single thread. */
unsigned deferred_cbs : 1;
-#ifdef _WIN32
+#ifdef WIN32
/** True iff this buffer is set up for overlapped IO. */
unsigned is_overlapped : 1;
#endif
@@ -135,7 +133,7 @@ struct evbuffer {
ev_uint32_t flags;
/** Used to implement deferred callbacks. */
- struct event_base *cb_queue;
+ struct deferred_cb_queue *cb_queue;
/** A reference count on this evbuffer. When the reference count
* reaches 0, the buffer is destroyed. Manipulated with
@@ -143,24 +141,24 @@ struct evbuffer {
* evbuffer_free. */
int refcnt;
- /** A struct event_callback handle to make all of this buffer's callbacks
+ /** A deferred_cb handle to make all of this buffer's callbacks
* invoked from the event loop. */
- struct event_callback deferred;
+ struct deferred_cb deferred;
/** A doubly-linked-list of callback functions */
- LIST_HEAD(evbuffer_cb_queue, evbuffer_cb_entry) callbacks;
+ TAILQ_HEAD(evbuffer_cb_queue, evbuffer_cb_entry) callbacks;
/** The parent bufferevent object this evbuffer belongs to.
* NULL if the evbuffer stands alone. */
struct bufferevent *parent;
};
-#if EVENT__SIZEOF_OFF_T < EVENT__SIZEOF_SIZE_T
+#if _EVENT_SIZEOF_OFF_T < _EVENT_SIZEOF_SIZE_T
typedef ev_ssize_t ev_misalign_t;
#define EVBUFFER_CHAIN_MAX ((size_t)EV_SSIZE_MAX)
#else
typedef ev_off_t ev_misalign_t;
-#if EVENT__SIZEOF_OFF_T > EVENT__SIZEOF_SIZE_T
+#if _EVENT_SIZEOF_OFF_T > _EVENT_SIZEOF_SIZE_T
#define EVBUFFER_CHAIN_MAX EV_SIZE_MAX
#else
#define EVBUFFER_CHAIN_MAX ((size_t)EV_SSIZE_MAX)
@@ -186,8 +184,8 @@ struct evbuffer_chain {
/** Set if special handling is required for this chain */
unsigned flags;
-#define EVBUFFER_FILESEGMENT 0x0001 /**< A chain used for a file segment */
-#define EVBUFFER_SENDFILE 0x0002 /**< a chain used with sendfile */
+#define EVBUFFER_MMAP 0x0001 /**< memory in buffer is mmaped */
+#define EVBUFFER_SENDFILE 0x0002 /**< a chain used for sendfile */
#define EVBUFFER_REFERENCE 0x0004 /**< a chain with a mem reference */
#define EVBUFFER_IMMUTABLE 0x0008 /**< read-only chain */
/** a chain that mustn't be reallocated or freed, or have its contents
@@ -198,11 +196,6 @@ struct evbuffer_chain {
/** a chain that should be freed, but can't be freed until it is
* un-pinned. */
#define EVBUFFER_DANGLING 0x0040
- /** a chain that is a referenced copy of another chain */
-#define EVBUFFER_MULTICAST 0x0080
-
- /** number of references to this chain */
- int refcnt;
/** Usually points to the read-write memory belonging to this
* buffer allocated as part of the evbuffer_chain allocation.
@@ -213,67 +206,21 @@ struct evbuffer_chain {
unsigned char *buffer;
};
-/** callback for a reference chain; lets us know what to do with it when
- * we're done with it. Lives at the end of an evbuffer_chain with the
- * EVBUFFER_REFERENCE flag set */
+/* this is currently used by both mmap and sendfile */
+/* TODO(niels): something strange needs to happen for Windows here, I am not
+ * sure what that is, but it needs to get looked into.
+ */
+struct evbuffer_chain_fd {
+ int fd; /**< the fd associated with this chain */
+};
+
+/** callback for a reference buffer; lets us know what to do with it when
+ * we're done with it. */
struct evbuffer_chain_reference {
evbuffer_ref_cleanup_cb cleanupfn;
void *extra;
};
-/** File segment for a file-segment chain. Lives at the end of an
- * evbuffer_chain with the EVBUFFER_FILESEGMENT flag set. */
-struct evbuffer_chain_file_segment {
- struct evbuffer_file_segment *segment;
-#ifdef _WIN32
- /** If we're using CreateFileMapping, this is the handle to the view. */
- HANDLE view_handle;
-#endif
-};
-
-/* Declared in event2/buffer.h; defined here. */
-struct evbuffer_file_segment {
- void *lock; /**< lock prevent concurrent access to refcnt */
- int refcnt; /**< Reference count for this file segment */
- unsigned flags; /**< combination of EVBUF_FS_* flags */
-
- /** What kind of file segment is this? */
- unsigned can_sendfile : 1;
- unsigned is_mapping : 1;
-
- /** The fd that we read the data from. */
- int fd;
- /** If we're using mmap, this is the raw mapped memory. */
- void *mapping;
-#ifdef _WIN32
- /** If we're using CreateFileMapping, this is the mapping */
- HANDLE mapping_handle;
-#endif
- /** If we're using mmap or IO, this is the content of the file
- * segment. */
- char *contents;
- /** Position of this segment within the file. */
- ev_off_t file_offset;
- /** If we're using mmap, this is the offset within 'mapping' where
- * this data segment begins. */
- ev_off_t mmap_offset;
- /** The length of this segment. */
- ev_off_t length;
- /** Cleanup callback function */
- evbuffer_file_segment_cleanup_cb cleanup_cb;
- /** Argument to be pass to cleanup callback function */
- void *cleanup_cb_arg;
-};
-
-/** Information about the multicast parent of a chain. Lives at the
- * end of an evbuffer_chain with the EVBUFFER_MULTICAST flag set. */
-struct evbuffer_multicast_parent {
- /** source buffer the multicast parent belongs to */
- struct evbuffer *source;
- /** multicast parent for this chain */
- struct evbuffer_chain *parent;
-};
-
#define EVBUFFER_CHAIN_SIZE sizeof(struct evbuffer_chain)
/** Return a pointer to extra data allocated along with an evbuffer. */
#define EVBUFFER_CHAIN_EXTRA(t, c) (t *)((struct evbuffer_chain *)(c) + 1)
@@ -300,21 +247,21 @@ struct evbuffer_multicast_parent {
} while (0)
/** Increase the reference count of buf by one. */
-void evbuffer_incref_(struct evbuffer *buf);
+void _evbuffer_incref(struct evbuffer *buf);
/** Increase the reference count of buf by one and acquire the lock. */
-void evbuffer_incref_and_lock_(struct evbuffer *buf);
+void _evbuffer_incref_and_lock(struct evbuffer *buf);
/** Pin a single buffer chain using a given flag. A pinned chunk may not be
* moved or freed until it is unpinned. */
-void evbuffer_chain_pin_(struct evbuffer_chain *chain, unsigned flag);
+void _evbuffer_chain_pin(struct evbuffer_chain *chain, unsigned flag);
/** Unpin a single buffer chain using a given flag. */
-void evbuffer_chain_unpin_(struct evbuffer_chain *chain, unsigned flag);
+void _evbuffer_chain_unpin(struct evbuffer_chain *chain, unsigned flag);
/** As evbuffer_free, but requires that we hold a lock on the buffer, and
* releases the lock before freeing it and the buffer. */
-void evbuffer_decref_and_unlock_(struct evbuffer *buffer);
+void _evbuffer_decref_and_unlock(struct evbuffer *buffer);
/** As evbuffer_expand, but does not guarantee that the newly allocated memory
* is contiguous. Instead, it may be split across two or more chunks. */
-int evbuffer_expand_fast_(struct evbuffer *, size_t, int);
+int _evbuffer_expand_fast(struct evbuffer *, size_t, int);
/** Helper: prepares for a readv/WSARecv call by expanding the buffer to
* hold enough memory to read 'howmuch' bytes in possibly noncontiguous memory.
@@ -322,7 +269,7 @@ int evbuffer_expand_fast_(struct evbuffer *, size_t, int);
* extent, and *chainp to point to the first chain that we'll try to read into.
* Returns the number of vecs used.
*/
-int evbuffer_read_setup_vecs_(struct evbuffer *buf, ev_ssize_t howmuch,
+int _evbuffer_read_setup_vecs(struct evbuffer *buf, ev_ssize_t howmuch,
struct evbuffer_iovec *vecs, int n_vecs, struct evbuffer_chain ***chainp,
int exact);
@@ -335,17 +282,12 @@ int evbuffer_read_setup_vecs_(struct evbuffer *buf, ev_ssize_t howmuch,
* See note in buffer_iocp's launch_write function */
/** Set the parent bufferevent object for buf to bev */
-void evbuffer_set_parent_(struct evbuffer *buf, struct bufferevent *bev);
-
-void evbuffer_invoke_callbacks_(struct evbuffer *buf);
-
+void evbuffer_set_parent(struct evbuffer *buf, struct bufferevent *bev);
-int evbuffer_get_callbacks_(struct evbuffer *buffer,
- struct event_callback **cbs,
- int max_cbs);
+void evbuffer_invoke_callbacks(struct evbuffer *buf);
#ifdef __cplusplus
}
#endif
-#endif /* EVBUFFER_INTERNAL_H_INCLUDED_ */
+#endif /* _EVBUFFER_INTERNAL_H_ */