Stephan Bosch [Wed, 25 May 2016 21:41:47 +0000 (23:41 +0200)]
lib-http: client: Fixed bug in handling of lost connections while returning from another ioloop.
At one instance the http_client_connection_is_ready() function could have destroyed the connection while the caller still depended on it.
Renamed the http_client_connection_is_ready() function to http_client_connection_check_ready().
This now returns -1 when the connection got destroyed. Before it returned a bool that just indicated whether the connection was ready or not.
So, there is no need anymore to preserve a connection reference while calling this function.
Stephan Bosch [Mon, 23 May 2016 00:38:49 +0000 (02:38 +0200)]
lib-http: client: Reworked connection close handling.
Now, the peer is immediately notified of the lost connection.
Before, this step was only taken when the connection was fully dereferenced.
To prevent recursive notifications between peer and connection, handling the loss of a connection is deferred to the request handler.
When a peer is freed, any associated lingering connections have conn->peer set to NULL.
Stephan Bosch [Sun, 22 May 2016 10:48:37 +0000 (12:48 +0200)]
lib-http: client: Prevent useless and unexpected request callbacks during http_client_deinit().
Requests are now destroyed before queues, hosts, peers and connections.
As a side-effect, requests are now removed from the client request list at http_client_request_destroy(), so that requests with lingering references will no longer make http_client_wait() hang.
Stephan Bosch [Sat, 21 May 2016 11:16:08 +0000 (13:16 +0200)]
lib-http: client: Improved request reference counting in connection code.
It should now always be clear when the connection object holds a reference to a request and when it is released.
Only while the reference is held, req->conn points to a connection.
This also makes the assertion in http_client_request_unref() more robust and clear.
Timo Sirainen [Wed, 25 May 2016 19:29:47 +0000 (22:29 +0300)]
cassandra: Added metrics=path connect setting.
Cassandra's metrics are written to the path in JSON format. It can be a file
or a FIFO. The path supports expanding the standard global %variables, such
as %{pid}
J. Nick Koston [Fri, 20 May 2016 00:15:49 +0000 (19:15 -0500)]
dsync: race condition where done/finish is received after one side has closed
We do not tell the remote we are closing if they have
already told us because they close the
connection after sending ITEM_FINISH or ITEM_DONE and will
not be ever receive anything else from us unless
it just happens to get combined into the same packet
as a previous response and is already in the buffer.
Timo Sirainen [Mon, 23 May 2016 15:46:09 +0000 (18:46 +0300)]
lib-index: Make sure cache compression doesn't clear the file unneededly.
This probably never happened with current code, except when the cache file
was already broken.
mail_cache_compress() unmapped cache when map_with_read==TRUE, but we never
mapped it back. This would cause cache copying code to think cache was
unusable and not copy anything.
Timo Sirainen [Mon, 23 May 2016 10:12:41 +0000 (13:12 +0300)]
lib-ldap: Use ldap_unbind_ext() instead of ldap_destroy()
This allows it to compile with older LDAP libraries. Their behavior (at least
in OpenLDAP) is identical as long as LDAP_OPT_CLIENT_CONTROLS haven't been
changed, which we haven't.
Broken by 79490ec1a. The idea is to delete the mailbox early to avoid
unnecessary work, but we deleted it too early. If the last mail(s) were
deleted instead of just expunging them we deleted the whole mailbox.
It should do it on the following parsings as well if there were any
callbacks that were called, or if the hdr==NULL callback added any
headers. This is important because the hdr==NULL call could do some
cleanups.
Timo Sirainen [Wed, 18 May 2016 19:36:57 +0000 (22:36 +0300)]
lib: Changed istream.abs_start_offset to be relative start_offset
i_stream_get_absolute_offset() walks through the stream's parents to get the
absolute offset. This allows streams to change their start_offset after
they have already created (e.g. istream-metawrap).
Timo Sirainen [Mon, 16 May 2016 10:21:57 +0000 (13:21 +0300)]
Removed buffer_reset().
It was just a wrapper to buffer_set_used_size() and its comment was a bit
confusing (or obsolete), since it wasn't actually immediately zeroing out
the buffer.
Stephan Bosch [Mon, 16 May 2016 16:43:52 +0000 (18:43 +0200)]
uri-util: Changed URI host/authority parsing API to not use a boolean.
The boolean indicated whether the basic reg-name syntax or the more limited Internet host name syntax was to be expected.
This change creates separate functions for this.
Phil Carmody [Mon, 8 Feb 2016 16:32:10 +0000 (18:32 +0200)]
lib: istream - provide alternatives to i_stream_read_data()
Providing as a parameter the number of bytes that you would be
disappointed to receive was confusing compared to providing the
number that you would be happy to receive. This lets us get rid
of all the '-1's in the callers. The callers which used 0 as
a parameter were so common that it's worth providing a separate
API just to simplify their demands.
Deep down, these are still the same underlying function. Currently
we route the new API through the old one, but eventually, the old
API can be routed through the new one, so that the friendlier
interface has the simplest implementation.