mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
r21173: - keep the ctdb queue when reconnecting (this will need to be more
complex once we have code for changing the number of nodes) - fixed a ctdb/tcp bug in the handling of multiple packets waiting on a socket
This commit is contained in:
parent
2d6e082e81
commit
faf9a1146c
@ -38,13 +38,6 @@ static void ctdb_tcp_node_dead(struct event_context *ev, struct timed_event *te,
|
|||||||
struct ctdb_tcp_node *tnode = talloc_get_type(node->private,
|
struct ctdb_tcp_node *tnode = talloc_get_type(node->private,
|
||||||
struct ctdb_tcp_node);
|
struct ctdb_tcp_node);
|
||||||
|
|
||||||
/* flush the queue */
|
|
||||||
while (tnode->queue) {
|
|
||||||
struct ctdb_tcp_packet *pkt = tnode->queue;
|
|
||||||
DLIST_REMOVE(tnode->queue, pkt);
|
|
||||||
talloc_free(pkt);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* start a new connect cycle to try to re-establish the
|
/* start a new connect cycle to try to re-establish the
|
||||||
link */
|
link */
|
||||||
talloc_free(tnode->fde);
|
talloc_free(tnode->fde);
|
||||||
@ -68,6 +61,7 @@ void ctdb_tcp_node_write(struct event_context *ev, struct fd_event *fde,
|
|||||||
always an error, as we have separate read and write
|
always an error, as we have separate read and write
|
||||||
sockets. In future we may combine them, but for now it must
|
sockets. In future we may combine them, but for now it must
|
||||||
mean that the socket is dead, so we try to reconnect */
|
mean that the socket is dead, so we try to reconnect */
|
||||||
|
node->ctdb->upcalls->node_dead(node);
|
||||||
talloc_free(tnode->fde);
|
talloc_free(tnode->fde);
|
||||||
close(tnode->fd);
|
close(tnode->fd);
|
||||||
tnode->fd = -1;
|
tnode->fd = -1;
|
||||||
@ -170,10 +164,9 @@ void ctdb_tcp_incoming_read(struct event_context *ev, struct fd_event *fde,
|
|||||||
in->ctdb->upcalls->recv_pkt(in->ctdb, d2, len);
|
in->ctdb->upcalls->recv_pkt(in->ctdb, d2, len);
|
||||||
data += len;
|
data += len;
|
||||||
nread -= len;
|
nread -= len;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nread < 4 || *(uint32_t *)data > nread) {
|
if (nread > 0) {
|
||||||
/* we have only part of a packet */
|
/* we have only part of a packet */
|
||||||
if (data_base == data) {
|
if (data_base == data) {
|
||||||
in->partial.data = data;
|
in->partial.data = data;
|
||||||
|
Loading…
Reference in New Issue
Block a user