mirror of
https://github.com/samba-team/samba.git
synced 2025-01-10 01:18:15 +03:00
messages_dgm: Properly handle receiver re-initialization
This only properly covers the small-message nonblocking case. Covering the large-message and the blocking case is a much larger effort assuming we want to re-send the failed message if parts of the message has gone through properly. Don't do that for now. This was found by sanba_dnsupdate constantly recreating its irpc handle to winbindd in the RODC case. The messaging_dgm code cached connected datagram sockets based on the destination pid for 1 second. Which means the IRPC responses from winbindd are never delivered to samba_dnsupdate, which will then hit a timeout. BUG: https://bugzilla.samba.org/show_bug.cgi?id=13786 Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Andrew Bartlett <abartlet@samba.org>
This commit is contained in:
parent
8d8f62c4b9
commit
2543bba036
@ -1 +0,0 @@
|
||||
^samba3.smbtorture_s3.LOCAL-MESSAGING-READ3
|
@ -1419,6 +1419,7 @@ int messaging_dgm_send(pid_t pid,
|
||||
struct messaging_dgm_context *ctx = global_dgm_context;
|
||||
struct messaging_dgm_out *out;
|
||||
int ret;
|
||||
unsigned retries = 0;
|
||||
|
||||
if (ctx == NULL) {
|
||||
return ENOTCONN;
|
||||
@ -1426,6 +1427,7 @@ int messaging_dgm_send(pid_t pid,
|
||||
|
||||
messaging_dgm_validate(ctx);
|
||||
|
||||
again:
|
||||
ret = messaging_dgm_out_get(ctx, pid, &out);
|
||||
if (ret != 0) {
|
||||
return ret;
|
||||
@ -1435,6 +1437,20 @@ int messaging_dgm_send(pid_t pid,
|
||||
|
||||
ret = messaging_dgm_out_send_fragmented(ctx->ev, out, iov, iovlen,
|
||||
fds, num_fds);
|
||||
if (ret == ECONNREFUSED) {
|
||||
/*
|
||||
* We cache outgoing sockets. If the receiver has
|
||||
* closed and re-opened the socket since our last
|
||||
* message, we get connection refused. Retry.
|
||||
*/
|
||||
|
||||
TALLOC_FREE(out);
|
||||
|
||||
if (retries < 5) {
|
||||
retries += 1;
|
||||
goto again;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user