summaryrefslogtreecommitdiffstats
path: root/ctdb/tcp/tcp_init.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2007-06-02 08:41:19 +1000
committerAndrew Tridgell <tridge@samba.org>2007-06-02 08:41:19 +1000
commit5e5701a7b802a82ac03df50e34b0f314eca410b0 (patch)
tree389d9625dca59299119247d473e6d54772673be4 /ctdb/tcp/tcp_init.c
parent21f6fa53598b6a107d557d7af58970befbc038d7 (diff)
downloadsamba-5e5701a7b802a82ac03df50e34b0f314eca410b0.tar.gz
samba-5e5701a7b802a82ac03df50e34b0f314eca410b0.tar.xz
samba-5e5701a7b802a82ac03df50e34b0f314eca410b0.zip
- make calling of recovered event script async
- shutdown sockets before calling shutdown script (This used to be ctdb commit c5e099feef94a014a77742b6cc1d0afe78ef9da9)
Diffstat (limited to 'ctdb/tcp/tcp_init.c')
-rw-r--r--ctdb/tcp/tcp_init.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/ctdb/tcp/tcp_init.c b/ctdb/tcp/tcp_init.c
index 4f3c29a010..7e75195302 100644
--- a/ctdb/tcp/tcp_init.c
+++ b/ctdb/tcp/tcp_init.c
@@ -32,14 +32,16 @@
*/
static int ctdb_tcp_add_node(struct ctdb_node *node)
{
+ struct ctdb_tcp *ctcp = talloc_get_type(node->ctdb->private_data,
+ struct ctdb_tcp);
struct ctdb_tcp_node *tnode;
- tnode = talloc_zero(node, struct ctdb_tcp_node);
+ tnode = talloc_zero(ctcp, struct ctdb_tcp_node);
CTDB_NO_MEMORY(node->ctdb, tnode);
tnode->fd = -1;
node->private_data = tnode;
- tnode->queue = ctdb_queue_setup(node->ctdb, node, tnode->fd, CTDB_TCP_ALIGNMENT,
+ tnode->queue = ctdb_queue_setup(node->ctdb, ctcp, tnode->fd, CTDB_TCP_ALIGNMENT,
ctdb_tcp_tnode_cb, node);
return 0;
@@ -76,9 +78,11 @@ static int ctdb_tcp_start(struct ctdb_context *ctdb)
next event loop */
for (i=0;i<ctdb->num_nodes;i++) {
struct ctdb_node *node = *(ctdb->nodes + i);
+ struct ctdb_tcp_node *tnode = talloc_get_type(
+ node->private_data, struct ctdb_tcp_node);
if (!(ctdb->flags & CTDB_FLAG_SELF_CONNECT) &&
ctdb_same_address(&ctdb->address, &node->address)) continue;
- event_add_timed(ctdb->ev, node, timeval_zero(),
+ event_add_timed(ctdb->ev, tnode, timeval_zero(),
ctdb_tcp_node_connect, node);
}
@@ -87,6 +91,18 @@ static int ctdb_tcp_start(struct ctdb_context *ctdb)
/*
+ shutdown the transport
+*/
+static void ctdb_tcp_shutdown(struct ctdb_context *ctdb)
+{
+ struct ctdb_tcp *ctcp = talloc_get_type(ctdb->private_data,
+ struct ctdb_tcp);
+ talloc_free(ctcp);
+ ctdb->private_data = NULL;
+}
+
+
+/*
transport packet allocator - allows transport to control memory for packets
*/
static void *ctdb_tcp_allocate_pkt(TALLOC_CTX *mem_ctx, size_t size)
@@ -104,7 +120,8 @@ static const struct ctdb_methods ctdb_tcp_methods = {
.start = ctdb_tcp_start,
.queue_pkt = ctdb_tcp_queue_pkt,
.add_node = ctdb_tcp_add_node,
- .allocate_pkt = ctdb_tcp_allocate_pkt
+ .allocate_pkt = ctdb_tcp_allocate_pkt,
+ .shutdown = ctdb_tcp_shutdown,
};
/*