aboutsummaryrefslogtreecommitdiff
path: root/meta-linaro
diff options
context:
space:
mode:
authorKoen Kooi <koen.kooi@linaro.org>2015-11-18 09:46:46 +0100
committerKoen Kooi <koen.kooi@linaro.org>2015-11-18 09:46:46 +0100
commitede874dc47690a5b9196abebc7e5f2fd12d71254 (patch)
tree268b1e4c9211095c1ed229bbd7978d46c4d00b90 /meta-linaro
parentfaf675090b9d05a85a01f9a0f8fa0f3539cb85da (diff)
libevent: drop
The patch was added for an ancient hiphopvm. We don't use hhvm anymore and I'm not sure a recent version actually needs this patch. Change-Id: Ic219b7091f5d19bfb69c3d92df3ca3e306e49757 Signed-off-by: Koen Kooi <koen.kooi@linaro.org>
Diffstat (limited to 'meta-linaro')
-rw-r--r--meta-linaro/recipes-extra/libevent/files/LICENSE.txt74
-rw-r--r--meta-linaro/recipes-extra/libevent/files/libevent-1.4.14.fb-changes.diff611
-rw-r--r--meta-linaro/recipes-extra/libevent/libevent-fb_1.4.14b.bb20
3 files changed, 0 insertions, 705 deletions
diff --git a/meta-linaro/recipes-extra/libevent/files/LICENSE.txt b/meta-linaro/recipes-extra/libevent/files/LICENSE.txt
deleted file mode 100644
index 5a315e47..00000000
--- a/meta-linaro/recipes-extra/libevent/files/LICENSE.txt
+++ /dev/null
@@ -1,74 +0,0 @@
-Libevent is available for use under the following license, commonly known
-as the 3-clause (or "modified") BSD license:
-
-==============================
-Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
-Copyright (c) 2007-2010 Niels Provos and Nick Mathewson
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-3. The name of the author may not be used to endorse or promote products
- derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-==============================
-
-Portions of Libevent are based on works by others, also made available by
-them under the three-clause BSD license above. The copyright notices are
-available in the corresponding source files; the license is as above. Here's
-a list:
-
-log.c:
- Copyright (c) 2000 Dug Song <dugsong@monkey.org>
- Copyright (c) 1993 The Regents of the University of California.
-
-strlcpy.c:
- Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
-
-win32select.c:
- Copyright (c) 2003 Michael A. Davis <mike@datanerds.net>
-
-evport.c:
- Copyright (c) 2007 Sun Microsystems
-
-ht-internal.h:
- Copyright (c) 2002 Christopher Clark
-
-minheap-internal.h:
- Copyright (c) 2006 Maxim Yegorushkin <maxim.yegorushkin@gmail.com>
-
-==============================
-
-The arc4module is available under the following, sometimes called the
-"OpenBSD" license:
-
- Copyright (c) 1996, David Mazieres <dm@uun.org>
- Copyright (c) 2008, Damien Miller <djm@openbsd.org>
-
- Permission to use, copy, modify, and distribute this software for any
- purpose with or without fee is hereby granted, provided that the above
- copyright notice and this permission notice appear in all copies.
-
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
diff --git a/meta-linaro/recipes-extra/libevent/files/libevent-1.4.14.fb-changes.diff b/meta-linaro/recipes-extra/libevent/files/libevent-1.4.14.fb-changes.diff
deleted file mode 100644
index 0f29aac2..00000000
--- a/meta-linaro/recipes-extra/libevent/files/libevent-1.4.14.fb-changes.diff
+++ /dev/null
@@ -1,611 +0,0 @@
-diff --git a/event.c b/event.c
-index 74ba5c4..06984b8 100644
---- a/event.c
-+++ b/event.c
-@@ -138,10 +138,12 @@ detect_monotonic(void)
- static int
- gettime(struct event_base *base, struct timeval *tp)
- {
-+/*
- if (base->tv_cache.tv_sec) {
- *tp = base->tv_cache;
- return (0);
- }
-+*/
-
- #if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_MONOTONIC)
- if (use_monotonic) {
-@@ -481,7 +483,7 @@ event_base_loop(struct event_base *base, int flags)
- int res, done;
-
- /* clear time cache */
-- base->tv_cache.tv_sec = 0;
-+ /* base->tv_cache.tv_sec = 0; */
-
- if (base->sig.ev_signal_added)
- evsignal_base = base;
-@@ -533,13 +535,13 @@ event_base_loop(struct event_base *base, int flags)
- gettime(base, &base->event_tv);
-
- /* clear time cache */
-- base->tv_cache.tv_sec = 0;
-+ /* base->tv_cache.tv_sec = 0; */
-
- res = evsel->dispatch(base, evbase, tv_p);
-
- if (res == -1)
- return (-1);
-- gettime(base, &base->tv_cache);
-+ /* gettime(base, &base->tv_cache); */
-
- timeout_process(base);
-
-@@ -552,7 +554,7 @@ event_base_loop(struct event_base *base, int flags)
- }
-
- /* clear time cache */
-- base->tv_cache.tv_sec = 0;
-+ /* base->tv_cache.tv_sec = 0; */
-
- event_debug(("%s: asked to terminate loop.", __func__));
- return (0);
-diff --git a/evhttp.h b/evhttp.h
-index 7ddf720..13c8b79 100644
---- a/evhttp.h
-+++ b/evhttp.h
-@@ -81,12 +81,50 @@ struct evhttp *evhttp_new(struct event_base *base);
- * @param http a pointer to an evhttp object
- * @param address a string containing the IP address to listen(2) on
- * @param port the port number to listen on
-- * @return a newly allocated evhttp struct
-+ * @return 0 on success, -1 on error
- * @see evhttp_free()
- */
- int evhttp_bind_socket(struct evhttp *http, const char *address, u_short port);
-
- /**
-+ * Binds an HTTP server on the specified address and port, using backlog.
-+ *
-+ * Can be called multiple times to bind the same http server
-+ * to multiple different ports.
-+ *
-+ * @param http a pointer to an evhttp object
-+ * @param address a string containing the IP address to listen(2) on
-+ * @param port the port number to listen on
-+ * @param backlog the backlog value for listen(2)
-+ * @return 0 on success, -1 on error
-+ * @see evhttp_free()
-+ */
-+int evhttp_bind_socket_backlog(struct evhttp *http, const char *address, u_short port, int backlog);
-+
-+/**
-+ * Like evhttp_bind_socket(), but returns the socket file descriptor.
-+ *
-+ * @param http a pointer to an evhttp object
-+ * @param address a string containing the IP address to listen(2) on
-+ * @param port the port number to listen on
-+ * @return Socket file descriptor on success, -1 on failure
-+ * @see evhttp_bind_socket()
-+ */
-+int evhttp_bind_socket_with_fd(struct evhttp *http, const char *address, u_short port);
-+
-+/**
-+ * Like evhttp_bind_socket(), but returns the socket file descriptor.
-+ *
-+ * @param http a pointer to an evhttp object
-+ * @param address a string containing the IP address to listen(2) on
-+ * @param port the port number to listen on
-+ * @param backlog the backlog value for listen(2)
-+ * @return Socket file descriptor on success, -1 on failure
-+ * @see evhttp_bind_socket()
-+ */
-+int evhttp_bind_socket_backlog_fd(struct evhttp *http, const char *address, u_short port, int backlog);
-+
-+/**
- * Makes an HTTP server accept connections on the specified socket
- *
- * This may be useful to create a socket and then fork multiple instances
-@@ -105,6 +143,21 @@ int evhttp_bind_socket(struct evhttp *http, const char *address, u_short port);
- int evhttp_accept_socket(struct evhttp *http, int fd);
-
- /**
-+ * Makes an HTTP server stop accepting connections on the specified socket
-+ *
-+ * This may be useful when a socket has been sent via file descriptor passing
-+ * and is no longer needed by the current process.
-+ *
-+ * This function does not close the socket.
-+ *
-+ * @param http a pointer to an evhttp object
-+ * @param fd a socket fd that is currently accepting connections
-+ * @return 0 on success, -1 on failure.
-+ * @see evhttp_accept_socket()
-+ */
-+int evhttp_del_accept_socket(struct evhttp *http, int fd);
-+
-+/**
- * Free the previously created HTTP server.
- *
- * Works only if no requests are currently being served.
-@@ -134,6 +187,28 @@ void evhttp_set_gencb(struct evhttp *,
- */
- void evhttp_set_timeout(struct evhttp *, int timeout_in_secs);
-
-+/**
-+ * Limit the number of simultaneous connections via this http instance.
-+ *
-+ * @param http an evhttp object
-+ * @param nlimit the maximum number of connections, zero is unlimited
-+ */
-+int evhttp_set_connection_limit(struct evhttp *http, int nlimit);
-+
-+/**
-+ * Return the maximum number of connections allowed for this instance.
-+ *
-+ * @param http an evhttp object
-+ */
-+int evhttp_get_connection_limit(struct evhttp *http);
-+
-+/**
-+ * Return the number of connections in this instance.
-+ *
-+ * @param http an evhttp object
-+ */
-+int evhttp_get_connection_count(struct evhttp *http);
-+
- /* Request/Response functionality */
-
- /**
-@@ -157,6 +232,19 @@ void evhttp_send_error(struct evhttp_request *req, int error,
- void evhttp_send_reply(struct evhttp_request *req, int code,
- const char *reason, struct evbuffer *databuf);
-
-+/**
-+ * Send an HTML reply synchronously as much as possible by calling _begin().
-+ * Great for a worker thread to send the reply immediately without queuing up
-+ * events back to the loop. Call _end() to send the rest of the packet from
-+ * event loop.
-+ *
-+ * When _begin() returns needs to be fed into _end() as the 1st parameter
-+ * "nwritten".
-+ */
-+int evhttp_send_reply_sync_begin(struct evhttp_request *req, int code,
-+ const char *reason, struct evbuffer *databuf);
-+void evhttp_send_reply_sync_end(int nwritten, struct evhttp_request *req);
-+
- /* Low-level response interface, for streaming/chunked replies */
- void evhttp_send_reply_start(struct evhttp_request *, int, const char *);
- void evhttp_send_reply_chunk(struct evhttp_request *, struct evbuffer *);
-@@ -210,6 +298,7 @@ struct {
-
- enum evhttp_request_kind kind;
- enum evhttp_cmd_type type;
-+ char *ext_method; /* webdav methods, for example */
-
- char *uri; /* uri after HTTP request was parsed */
-
-@@ -224,6 +313,8 @@ struct {
- int chunked:1, /* a chunked request */
- userdone:1; /* the user has sent all data */
-
-+ int referenced;
-+
- struct evbuffer *output_buffer; /* outgoing post or data */
-
- /* Callback */
-diff --git a/http-internal.h b/http-internal.h
-index 9cd03cd..3f60f54 100644
---- a/http-internal.h
-+++ b/http-internal.h
-@@ -116,6 +116,9 @@ struct evhttp {
- TAILQ_HEAD(httpcbq, evhttp_cb) callbacks;
- struct evconq connections;
-
-+ int connection_count;
-+ int connection_limit;
-+
- int timeout;
-
- void (*gencb)(struct evhttp_request *req, void *);
-diff --git a/http.c b/http.c
-index efcec40..e10d114 100644
---- a/http.c
-+++ b/http.c
-@@ -219,6 +219,13 @@ static int evhttp_decode_uri_internal(const char *uri, size_t length,
- void evhttp_read(int, short, void *);
- void evhttp_write(int, short, void *);
-
-+
-+void evhttp_server_drop_connection(struct evhttp_connection *evcon);
-+void evhttp_server_add_connection(struct evhttp *http,
-+ struct evhttp_connection *evcon);
-+void evhttp_pause(struct evhttp *http);
-+void evhttp_resume(struct evhttp *http);
-+
- #ifndef HAVE_STRSEP
- /* strsep replacement for platforms that lack it. Only works if
- * del is one character long. */
-@@ -478,7 +485,6 @@ evhttp_make_header_response(struct evhttp_connection *evcon,
- evhttp_add_header(req->output_headers,
- "Connection", "keep-alive");
-
-- if (req->minor == 1 || is_keepalive) {
- /*
- * we need to add the content length if the
- * user did not give it, this is required for
-@@ -488,7 +494,6 @@ evhttp_make_header_response(struct evhttp_connection *evcon,
- req->output_headers,
- (long)EVBUFFER_LENGTH(req->output_buffer));
- }
-- }
-
- /* Potentially add headers for unidentified content. */
- if (EVBUFFER_LENGTH(req->output_buffer)) {
-@@ -687,14 +692,14 @@ void
- evhttp_write(int fd, short what, void *arg)
- {
- struct evhttp_connection *evcon = arg;
-- int n;
-
- if (what == EV_TIMEOUT) {
- evhttp_connection_fail(evcon, EVCON_HTTP_TIMEOUT);
- return;
- }
-
-- n = evbuffer_write(evcon->output_buffer, fd);
-+ if (EVBUFFER_LENGTH(evcon->output_buffer) != 0) {
-+ int n = evbuffer_write(evcon->output_buffer, fd);
- if (n == -1) {
- event_debug(("%s: evbuffer_write", __func__));
- evhttp_connection_fail(evcon, EVCON_HTTP_EOF);
-@@ -706,6 +711,7 @@ evhttp_write(int fd, short what, void *arg)
- evhttp_connection_fail(evcon, EVCON_HTTP_EOF);
- return;
- }
-+ }
-
- if (EVBUFFER_LENGTH(evcon->output_buffer) != 0) {
- evhttp_add_event(&evcon->ev,
-@@ -1012,11 +1018,9 @@ evhttp_connection_free(struct evhttp_connection *evcon)
- TAILQ_REMOVE(&evcon->requests, req, next);
- evhttp_request_free(req);
- }
--
-- if (evcon->http_server != NULL) {
-- struct evhttp *http = evcon->http_server;
-- TAILQ_REMOVE(&http->connections, evcon, next);
-- }
-+
-+ if (evcon->http_server != NULL)
-+ evhttp_server_drop_connection(evcon);
-
- if (event_initialized(&evcon->close_ev))
- event_del(&evcon->close_ev);
-@@ -1101,10 +1105,16 @@ evhttp_connection_reset(struct evhttp_connection *evcon)
- }
- evcon->state = EVCON_DISCONNECTED;
-
-- evbuffer_drain(evcon->input_buffer,
-- EVBUFFER_LENGTH(evcon->input_buffer));
-- evbuffer_drain(evcon->output_buffer,
-- EVBUFFER_LENGTH(evcon->output_buffer));
-+ /*
-+ * These can grow quite large if processing a large photo or video
-+ * upload/download. Instead of keeping the buffers around, just
-+ * free and allocate new.
-+ */
-+ evbuffer_free(evcon->input_buffer);
-+ evcon->input_buffer = evbuffer_new();
-+
-+ evbuffer_free(evcon->output_buffer);
-+ evcon->output_buffer = evbuffer_new();
- }
-
- static void
-@@ -1278,19 +1288,52 @@ evhttp_parse_request_line(struct evhttp_request *req, char *line)
- if (line == NULL)
- return (-1);
- uri = strsep(&line, " ");
-- if (line == NULL)
-- return (-1);
-+ if (line == NULL) {
-+ version = "HTTP/1.0";
-+ } else {
- version = strsep(&line, " ");
- if (line != NULL)
- return (-1);
-+ }
-
- /* First line */
-+ req->ext_method = NULL;
- if (strcmp(method, "GET") == 0) {
- req->type = EVHTTP_REQ_GET;
- } else if (strcmp(method, "POST") == 0) {
- req->type = EVHTTP_REQ_POST;
- } else if (strcmp(method, "HEAD") == 0) {
- req->type = EVHTTP_REQ_HEAD;
-+ } else if (strcmp(method, "OPTIONS") == 0) {
-+ req->type = EVHTTP_REQ_POST;
-+ req->ext_method = "OPTIONS";
-+ } else if (strcmp(method, "REPORT") == 0) {
-+ req->type = EVHTTP_REQ_POST;
-+ req->ext_method = "REPORT";
-+ } else if (strcmp(method, "PROPFIND") == 0) {
-+ req->type = EVHTTP_REQ_POST;
-+ req->ext_method = "PROPFIND";
-+ } else if (strcmp(method, "PROPPATH") == 0) {
-+ req->type = EVHTTP_REQ_POST;
-+ req->ext_method = "PROPPATH";
-+ } else if (strcmp(method, "MKCOL") == 0) {
-+ req->type = EVHTTP_REQ_POST;
-+ req->ext_method = "MKCOL";
-+ } else if (strcmp(method, "MKCALENDAR") == 0) {
-+ req->type = EVHTTP_REQ_POST;
-+ req->ext_method = "MKCALENDAR";
-+ } else if (strcmp(method, "PUT") == 0) {
-+ req->type = EVHTTP_REQ_POST;
-+ req->ext_method = "PUT";
-+ } else if (strcmp(method, "DELETE") == 0) {
-+ req->type = EVHTTP_REQ_POST;
-+ req->ext_method = "DELETE";
-+ } else if (strcmp(method, "LOCK") == 0) {
-+ req->type = EVHTTP_REQ_POST;
-+ req->ext_method = "LOCK";
-+ } else if (strcmp(method, "UNLOCK") == 0) {
-+ req->type = EVHTTP_REQ_POST;
-+ req->ext_method = "UNLOCK";
- } else {
- event_debug(("%s: bad method %s on request %p from %s",
- __func__, method, req, req->remote_host));
-@@ -1963,10 +2006,44 @@ evhttp_send_reply(struct evhttp_request *req, int code, const char *reason,
- evhttp_send(req, databuf);
- }
-
-+int
-+evhttp_send_reply_sync_begin(struct evhttp_request *req, int code,
-+ const char *reason, struct evbuffer *databuf) {
-+ evhttp_response_code(req, code, reason);
-+ struct evhttp_connection *evcon = req->evcon;
-+
-+ assert(TAILQ_FIRST(&evcon->requests) == req);
-+
-+ /* xxx: not sure if we really should expose the data buffer this way */
-+ if (databuf != NULL)
-+ evbuffer_add_buffer(req->output_buffer, databuf);
-+
-+ /* Adds headers to the response */
-+ evhttp_make_header(evcon, req);
-+
-+ return evbuffer_write(evcon->output_buffer, evcon->fd);
-+}
-+
-+void
-+evhttp_send_reply_sync_end(int nwritten, struct evhttp_request *req) {
-+ struct evhttp_connection *evcon = req->evcon;
-+
-+ if (nwritten <= 0) {
-+ evhttp_connection_fail(evcon, EVCON_HTTP_EOF);
-+ } else if (EVBUFFER_LENGTH(evcon->output_buffer) == 0) {
-+ evhttp_send_done(evcon, NULL);
-+ } else {
-+ evhttp_write_buffer(evcon, evhttp_send_done, NULL);
-+ }
-+}
-+
-+
- void
- evhttp_send_reply_start(struct evhttp_request *req, int code,
- const char *reason)
- {
-+ req->referenced = 1;
-+
- evhttp_response_code(req, code, reason);
- if (req->major == 1 && req->minor == 1) {
- /* use chunked encoding for HTTP/1.1 */
-@@ -1986,6 +2063,8 @@ evhttp_send_reply_chunk(struct evhttp_request *req, struct evbuffer *databuf)
- if (evcon == NULL)
- return;
-
-+ if (req->referenced < 0) return;
-+
- if (req->chunked) {
- evbuffer_add_printf(evcon->output_buffer, "%x\r\n",
- (unsigned)EVBUFFER_LENGTH(databuf));
-@@ -2007,7 +2086,14 @@ evhttp_send_reply_end(struct evhttp_request *req)
- return;
- }
-
-- /* we expect no more calls form the user on this request */
-+ if (req->referenced < 0) {
-+ req->referenced = 0;
-+ evhttp_request_free(req);
-+ return;
-+ }
-+ req->referenced = 0;
-+
-+ /* we expect no more calls form the user on this request */
- req->userdone = 1;
-
- if (req->chunked) {
-@@ -2293,7 +2379,8 @@ accept_socket(int fd, short what, void *arg)
- }
-
- int
--evhttp_bind_socket(struct evhttp *http, const char *address, u_short port)
-+evhttp_bind_socket_backlog_fd(struct evhttp *http, const char *address,
-+ u_short port, int backlog)
- {
- int fd;
- int res;
-@@ -2301,7 +2388,7 @@ evhttp_bind_socket(struct evhttp *http, const char *address, u_short port)
- if ((fd = bind_socket(address, port, 1 /*reuse*/)) == -1)
- return (-1);
-
-- if (listen(fd, 128) == -1) {
-+ if (listen(fd, backlog) == -1) {
- event_warn("%s: listen", __func__);
- EVUTIL_CLOSESOCKET(fd);
- return (-1);
-@@ -2309,13 +2396,42 @@ evhttp_bind_socket(struct evhttp *http, const char *address, u_short port)
-
- res = evhttp_accept_socket(http, fd);
-
-- if (res != -1)
-+ if (res != -1) {
- event_debug(("Bound to port %d - Awaiting connections ... ",
- port));
-+ return (fd);
-+ }
-
- return (res);
- }
-
-+static int
-+mask_fd(int fd)
-+{
-+ return fd > 0 ? 0 : fd;
-+}
-+
-+int
-+evhttp_bind_socket(struct evhttp *http, const char *address, u_short port)
-+{
-+ return mask_fd(evhttp_bind_socket_backlog_fd(http, address, port, 128));
-+}
-+
-+int
-+evhttp_bind_socket_with_fd(struct evhttp *http, const char *address,
-+ u_short port)
-+{
-+ return evhttp_bind_socket_backlog_fd(http, address, port, 128);
-+}
-+
-+int
-+evhttp_bind_socket_backlog(struct evhttp *http, const char *address,
-+ u_short port, int backlog)
-+{
-+ return mask_fd(
-+ evhttp_bind_socket_backlog_fd(http, address, port, backlog));
-+}
-+
- int
- evhttp_accept_socket(struct evhttp *http, int fd)
- {
-@@ -2345,6 +2461,25 @@ evhttp_accept_socket(struct evhttp *http, int fd)
- return (0);
- }
-
-+int
-+evhttp_del_accept_socket(struct evhttp *http, int fd)
-+{
-+ struct evhttp_bound_socket *bound;
-+ TAILQ_FOREACH(bound, &http->sockets, next) {
-+ if (bound->bind_ev.ev_fd == fd)
-+ break;
-+ }
-+
-+ if (bound == NULL)
-+ return (-1);
-+
-+ TAILQ_REMOVE(&http->sockets, bound, next);
-+ event_del(&bound->bind_ev);
-+ free(bound);
-+
-+ return (0);
-+}
-+
- static struct evhttp*
- evhttp_new_object(void)
- {
-@@ -2527,6 +2662,11 @@ evhttp_request_new(void (*cb)(struct evhttp_request *, void *), void *arg)
- void
- evhttp_request_free(struct evhttp_request *req)
- {
-+ if (req->referenced) {
-+ req->referenced = -1;
-+ return;
-+ }
-+
- if (req->remote_host != NULL)
- free(req->remote_host);
- if (req->uri != NULL)
-@@ -2657,13 +2797,78 @@ evhttp_get_request(struct evhttp *http, int fd,
- * if we want to accept more than one request on a connection,
- * we need to know which http server it belongs to.
- */
-- evcon->http_server = http;
-- TAILQ_INSERT_TAIL(&http->connections, evcon, next);
-+
-+ evhttp_server_add_connection(http, evcon);
-
- if (evhttp_associate_new_request_with_connection(evcon) == -1)
- evhttp_connection_free(evcon);
- }
-
-+void
-+evhttp_pause(struct evhttp *http)
-+{
-+ struct evhttp_bound_socket *bound;
-+ TAILQ_FOREACH(bound, &http->sockets, next) {
-+ event_del(&bound->bind_ev);
-+ }
-+}
-+
-+void
-+evhttp_resume(struct evhttp *http)
-+{
-+ struct evhttp_bound_socket *bound;
-+ TAILQ_FOREACH(bound, &http->sockets, next) {
-+ event_add(&bound->bind_ev, 0);
-+ }
-+}
-+
-+int
-+evhttp_get_connection_limit(struct evhttp *http)
-+{
-+ return http->connection_limit;
-+}
-+
-+int
-+evhttp_set_connection_limit(struct evhttp *http, int nlimit)
-+{
-+ int olimit = http->connection_limit;
-+ http->connection_limit = nlimit;
-+ return olimit;
-+}
-+
-+int
-+evhttp_get_connection_count(struct evhttp *http)
-+{
-+ return http != NULL ? http->connection_count : 0;
-+}
-+
-+void
-+evhttp_server_add_connection(struct evhttp *http,
-+ struct evhttp_connection *evcon)
-+{
-+ evcon->http_server = http;
-+ TAILQ_INSERT_TAIL(&http->connections, evcon, next);
-+
-+ http->connection_count++;
-+ if (http->connection_limit > 0
-+ && http->connection_count >= http->connection_limit)
-+ {
-+ evhttp_pause(http);
-+ }
-+}
-+
-+void
-+evhttp_server_drop_connection(struct evhttp_connection *evcon)
-+{
-+ struct evhttp *http = evcon->http_server;
-+ TAILQ_REMOVE(&http->connections, evcon, next);
-+ http->connection_count--;
-+ if (http->connection_limit > 0
-+ && http->connection_count < http->connection_limit)
-+ {
-+ evhttp_resume(http);
-+ }
-+}
-
- /*
- * Network helper functions that we do not want to export to the rest of
diff --git a/meta-linaro/recipes-extra/libevent/libevent-fb_1.4.14b.bb b/meta-linaro/recipes-extra/libevent/libevent-fb_1.4.14b.bb
deleted file mode 100644
index 378f1cf0..00000000
--- a/meta-linaro/recipes-extra/libevent/libevent-fb_1.4.14b.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-require recipes-support/libevent/libevent_2.0.22.bb
-
-PROVIDES = "libevent"
-
-INC_PR = "1"
-
-SRC_URI = "http://github.com/downloads/libevent/libevent/libevent-${PV}-stable.tar.gz;name=archive \
- http://libevent.org/LICENSE.txt;name=license \
- file://libevent-1.4.14.fb-changes.diff"
-
-SRC_URI[archive.md5sum] = "a00e037e4d3f9e4fe9893e8a2d27918c"
-SRC_URI[archive.sha256sum] = "afa61b476a222ba43fc7cca2d24849ab0bbd940124400cb699915d3c60e46301"
-
-SRC_URI[license.md5sum] = "412e611443304db6a338ab32728ae297"
-SRC_URI[license.sha256sum] = "55739d5492273a7058c66b682012330a84c34eaa666f5c7030b0312573235270"
-
-
-S = "${WORKDIR}/libevent-${PV}-stable/"
-
-LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE.txt;md5=412e611443304db6a338ab32728ae297"