1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

async_req: make async_connect_send() "reentrant"

Allow callers to pass in socket fds that where already passed to an
earlier call of async_connect_send(). Callers expect this behaviour and
it was working until 05d4dbda83 broke it.

The proper fix would be to change callers to close the fd and start from
scratch with a fresh socket.

Bug: https://bugzilla.samba.org/show_bug.cgi?id=12105

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>

Autobuild-User(master): Ralph Böhme <slow@samba.org>
Autobuild-Date(master): Thu Aug  4 05:03:21 CEST 2016 on sn-devel-144
This commit is contained in:
Ralph Boehme 2016-08-03 15:00:45 +02:00
parent 065dcc8a45
commit 9c6a4ea278

View File

@ -128,11 +128,21 @@ struct tevent_req *async_connect_send(
}
/*
* The only errno indicating that the connect is still in
* flight is EINPROGRESS, everything else is an error
* The only errno indicating that an initial connect is still
* in flight is EINPROGRESS.
*
* We get EALREADY when someone calls us a second time for a
* given fd and the connect is still in flight (and returned
* EINPROGRESS the first time).
*
* This allows callers like open_socket_out_send() to reuse
* fds and call us with an fd for which the connect is still
* in flight. The proper thing to do for callers would be
* closing the fd and starting from scratch with a fresh
* socket.
*/
if (errno != EINPROGRESS) {
if (errno != EINPROGRESS && errno != EALREADY) {
tevent_req_error(req, errno);
return tevent_req_post(req, ev);
}