diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2015-04-07 08:29:34 +0000 |
---|---|---|
committer | <> | 2015-04-13 18:52:43 +0000 |
commit | b2ccf8dd31d1457ae9f0ae270054117179220370 (patch) | |
tree | 4ccd4a16d5e9ef5869630ba624e822665a6e248c /sntp/libevent/bufferevent_async.c | |
parent | bdab5265fcbf3f472545073a23f8999749a9f2b9 (diff) | |
download | ntp-b2ccf8dd31d1457ae9f0ae270054117179220370.tar.gz |
Imported from /home/lorry/working-area/delta_ntp/ntp-4.2.8p2.tar.gz.HEADntp-4.2.8p2master
Diffstat (limited to 'sntp/libevent/bufferevent_async.c')
-rw-r--r-- | sntp/libevent/bufferevent_async.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/sntp/libevent/bufferevent_async.c b/sntp/libevent/bufferevent_async.c index 137ad24..6395e57 100644 --- a/sntp/libevent/bufferevent_async.c +++ b/sntp/libevent/bufferevent_async.c @@ -381,9 +381,10 @@ be_async_destruct(struct bufferevent *bev) bev_async_del_write(bev_async); fd = evbuffer_overlapped_get_fd_(bev->input); - if (bev_p->options & BEV_OPT_CLOSE_ON_FREE) { - /* XXXX possible double-close */ + if (fd != (evutil_socket_t)INVALID_SOCKET && + (bev_p->options & BEV_OPT_CLOSE_ON_FREE)) { evutil_closesocket(fd); + evbuffer_overlapped_set_fd_(bev->input, INVALID_SOCKET); } } @@ -564,9 +565,9 @@ bufferevent_async_new_(struct event_base *base, event_overlapped_init_(&bev_a->read_overlapped, read_complete); event_overlapped_init_(&bev_a->write_overlapped, write_complete); + bufferevent_init_generic_timeout_cbs_(bev); + bev_a->ok = fd >= 0; - if (bev_a->ok) - bufferevent_init_generic_timeout_cbs_(bev); return bev; err: @@ -671,6 +672,7 @@ be_async_ctrl(struct bufferevent *bev, enum bufferevent_ctrl_op op, if (fd != (evutil_socket_t)INVALID_SOCKET && (bev_a->bev.options & BEV_OPT_CLOSE_ON_FREE)) { closesocket(fd); + evbuffer_overlapped_set_fd_(bev->input, INVALID_SOCKET); } bev_a->ok = 0; return 0; |