struct ctdb_db_context;
struct ctdb_record_handle;
+typedef void (*ctdb_client_callback_func_t)(void *private_data);
+
/* from client/client_connect.c */
int ctdb_client_init(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
const char *sockpath, struct ctdb_client_context **ret);
+void ctdb_client_set_disconnect_callback(struct ctdb_client_context *client,
+ ctdb_client_callback_func_t func,
+ void *private_data);
+
uint32_t ctdb_client_pnn(struct ctdb_client_context *client);
void ctdb_client_wait(struct tevent_context *ev, bool *done);
{
struct ctdb_client_context *client = talloc_get_type_abort(
private_data, struct ctdb_client_context);
+ ctdb_client_callback_func_t callback = client->callback;
+ void *callback_data = client->private_data;
- DEBUG(DEBUG_NOTICE, ("connection to daemon closed, exiting\n"));
talloc_free(client);
+ if (callback != NULL) {
+ callback(callback_data);
+ return;
+ }
+
+ DEBUG(DEBUG_NOTICE, ("connection to daemon closed, exiting\n"));
exit(1);
}
+void ctdb_client_set_disconnect_callback(struct ctdb_client_context *client,
+ ctdb_client_callback_func_t callback,
+ void *private_data)
+{
+ client->callback = callback;
+ client->private_data = private_data;
+}
+
uint32_t ctdb_client_pnn(struct ctdb_client_context *client)
{
return client->pnn;
#define __CTDB_CLIENT_PRIVATE_H__
#include "protocol/protocol.h"
+#include "client/client.h"
struct ctdb_db_context {
struct ctdb_db_context *prev, *next;
struct reqid_context *idr;
struct srvid_context *srv;
struct comm_context *comm;
+ ctdb_client_callback_func_t callback;
+ void *private_data;
int fd;
uint32_t pnn;
struct ctdb_db_context *db;