summaryrefslogtreecommitdiff
path: root/bufferevent_sock.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2009-04-13 03:08:11 +0000
committerNick Mathewson <nickm@torproject.org>2009-04-13 03:08:11 +0000
commit1becc4c4e656213d0f71938029a08a2da04dc97f (patch)
tree43cb05c8dae5259aea417e5f911de6dd870bf529 /bufferevent_sock.c
parent6567ecd4c587563be843ee8803417b53d3318cbd (diff)
downloadlibevent-1becc4c4e656213d0f71938029a08a2da04dc97f.tar.gz
Refactor new elements of bufferevent into bufferevent_private structure
This way we don't expose more of a bufferevent than we need to. One motivation is to make it easier to automatically get deferred callbacks with a bufferevent without exposing the deferred_cb structure. svn:r1169
Diffstat (limited to 'bufferevent_sock.c')
-rw-r--r--bufferevent_sock.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/bufferevent_sock.c b/bufferevent_sock.c
index 561bec79..0e5e3a7b 100644
--- a/bufferevent_sock.c
+++ b/bufferevent_sock.c
@@ -225,16 +225,18 @@ struct bufferevent *
bufferevent_socket_new(struct event_base *base, evutil_socket_t fd,
enum bufferevent_options options)
{
+ struct bufferevent_private *bufev_p;
struct bufferevent *bufev;
- if ((bufev = mm_calloc(1, sizeof(struct bufferevent))) == NULL)
+ if ((bufev_p = mm_calloc(1, sizeof(struct bufferevent_private)))== NULL)
return NULL;
- if (bufferevent_init_common(bufev, base, &bufferevent_ops_socket,
+ if (bufferevent_init_common(bufev_p, base, &bufferevent_ops_socket,
options) < 0) {
- mm_free(bufev);
+ mm_free(bufev_p);
return NULL;
}
+ bufev = &bufev_p->bev;
event_assign(&bufev->ev_read, bufev->ev_base, fd,
EV_READ|EV_PERSIST, bufferevent_readcb, bufev);
@@ -306,6 +308,8 @@ be_socket_disable(struct bufferevent *bufev, short event)
static void
be_socket_destruct(struct bufferevent *bufev)
{
+ struct bufferevent_private *bufev_p =
+ EVUTIL_UPCAST(bufev, struct bufferevent_private, bev);
evutil_socket_t fd;
assert(bufev->be_ops == &bufferevent_ops_socket);
@@ -314,7 +318,7 @@ be_socket_destruct(struct bufferevent *bufev)
event_del(&bufev->ev_read);
event_del(&bufev->ev_write);
- if (bufev->options & BEV_OPT_CLOSE_ON_FREE)
+ if (bufev_p->options & BEV_OPT_CLOSE_ON_FREE)
EVUTIL_CLOSESOCKET(fd);
}