diff options
author | Andrew Tridgell <tridge@samba.org> | 2007-06-02 08:41:19 +1000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2007-06-02 08:41:19 +1000 |
commit | 5e5701a7b802a82ac03df50e34b0f314eca410b0 (patch) | |
tree | 389d9625dca59299119247d473e6d54772673be4 /ctdb/tcp/tcp_init.c | |
parent | 21f6fa53598b6a107d557d7af58970befbc038d7 (diff) | |
download | samba-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.c | 25 |
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, }; /* |