Rev 205: always use allocated packets to avoid alignment errors in http://samba.org/~tridge/ctdb

tridge at samba.org tridge at samba.org
Fri Apr 27 15:10:47 GMT 2007


------------------------------------------------------------
revno: 205
revision-id: tridge at samba.org-20070427151047-fvef601i9ea2dnrj
parent: tridge at samba.org-20070427145352-19w38cwkghv01x8n
committer: Andrew Tridgell <tridge at samba.org>
branch nick: tridge
timestamp: Fri 2007-04-27 17:10:47 +0200
message:
  always use allocated packets to avoid alignment errors
modified:
  common/ctdb_client.c           ctdb_client.c-20070411010216-3kd8v37k61steeya-1
  common/ctdb_daemon.c           ctdb_daemon.c-20070409200331-3el1kqgdb9m4ib0g-1
=== modified file 'common/ctdb_client.c'
--- a/common/ctdb_client.c	2007-04-27 14:31:45 +0000
+++ b/common/ctdb_client.c	2007-04-27 15:10:47 +0000
@@ -381,7 +381,7 @@
 			     void *private_data)
 				    
 {
-	struct ctdb_req_register c;
+	struct ctdb_req_register *c;
 	int res;
 
 	/* if the domain socket is not yet open, open it */
@@ -389,15 +389,15 @@
 		ctdb_socket_connect(ctdb);
 	}
 
-	ZERO_STRUCT(c);
-
-	c.hdr.length       = sizeof(c);
-	c.hdr.ctdb_magic   = CTDB_MAGIC;
-	c.hdr.ctdb_version = CTDB_VERSION;
-	c.hdr.operation    = CTDB_REQ_REGISTER;
-	c.srvid            = srvid;
-
-	res = ctdb_client_queue_pkt(ctdb, &c.hdr);
+	c = ctdbd_allocate_pkt(ctdb, sizeof(*c));
+	c->hdr.length       = sizeof(*c);
+	c->hdr.ctdb_magic   = CTDB_MAGIC;
+	c->hdr.ctdb_version = CTDB_VERSION;
+	c->hdr.operation    = CTDB_REQ_REGISTER;
+	c->srvid            = srvid;
+
+	res = ctdb_client_queue_pkt(ctdb, &c->hdr);
+	talloc_free(c);
 	if (res != 0) {
 		return res;
 	}
@@ -446,15 +446,14 @@
  */
 void ctdb_connect_wait(struct ctdb_context *ctdb)
 {
-	struct ctdb_req_connect_wait r;
+	struct ctdb_req_connect_wait *r;
 	int res;
 
-	ZERO_STRUCT(r);
-
-	r.hdr.length     = sizeof(r);
-	r.hdr.ctdb_magic = CTDB_MAGIC;
-	r.hdr.ctdb_version = CTDB_VERSION;
-	r.hdr.operation = CTDB_REQ_CONNECT_WAIT;
+	r = ctdbd_allocate_pkt(ctdb, sizeof(*r));
+	r->hdr.length     = sizeof(*r);
+	r->hdr.ctdb_magic = CTDB_MAGIC;
+	r->hdr.ctdb_version = CTDB_VERSION;
+	r->hdr.operation = CTDB_REQ_CONNECT_WAIT;
 
 	DEBUG(3,("ctdb_connect_wait: sending to ctdbd\n"));
 
@@ -463,7 +462,8 @@
 		ctdb_socket_connect(ctdb);
 	}
 	
-	res = ctdb_queue_send(ctdb->daemon.queue, (uint8_t *)&r.hdr, r.hdr.length);
+	res = ctdb_queue_send(ctdb->daemon.queue, (uint8_t *)&r->hdr, r->hdr.length);
+	talloc_free(r);
 	if (res != 0) {
 		DEBUG(0,(__location__ " Failed to queue a connect wait request\n"));
 		return;
@@ -596,23 +596,24 @@
 */
 void ctdb_shutdown(struct ctdb_context *ctdb)
 {
-	struct ctdb_req_shutdown r;
-	int len;
+	struct ctdb_req_shutdown *r;
 
 	/* if the domain socket is not yet open, open it */
 	if (ctdb->daemon.sd==-1) {
 		ctdb_socket_connect(ctdb);
 	}
 
-	len = sizeof(struct ctdb_req_shutdown);
-	ZERO_STRUCT(r);
-	r.hdr.length       = len;
-	r.hdr.ctdb_magic   = CTDB_MAGIC;
-	r.hdr.ctdb_version = CTDB_VERSION;
-	r.hdr.operation    = CTDB_REQ_SHUTDOWN;
-	r.hdr.reqid        = 0;
-
-	ctdb_client_queue_pkt(ctdb, &(r.hdr));
+	r = ctdbd_allocate_pkt(ctdb, sizeof(*r));
+	ZERO_STRUCT(*r);
+	r->hdr.length       = sizeof(*r);
+	r->hdr.ctdb_magic   = CTDB_MAGIC;
+	r->hdr.ctdb_version = CTDB_VERSION;
+	r->hdr.operation    = CTDB_REQ_SHUTDOWN;
+	r->hdr.reqid        = 0;
+
+	ctdb_client_queue_pkt(ctdb, &(r->hdr));
+
+	talloc_free(r);
 
 	/* this event loop will terminate once we receive the reply */
 	while (1) {

=== modified file 'common/ctdb_daemon.c'
--- a/common/ctdb_daemon.c	2007-04-27 14:31:45 +0000
+++ b/common/ctdb_daemon.c	2007-04-27 15:10:47 +0000
@@ -216,23 +216,23 @@
 static void daemon_request_connect_wait(struct ctdb_client *client, 
 					struct ctdb_req_connect_wait *c)
 {
-	struct ctdb_reply_connect_wait r;
+	struct ctdb_reply_connect_wait *r;
 	int res;
 
 	/* first wait - in the daemon */
 	ctdb_daemon_connect_wait(client->ctdb);
 
 	/* now send the reply */
-	ZERO_STRUCT(r);
-
-	r.hdr.length     = sizeof(r);
-	r.hdr.ctdb_magic = CTDB_MAGIC;
-	r.hdr.ctdb_version = CTDB_VERSION;
-	r.hdr.operation = CTDB_REPLY_CONNECT_WAIT;
-	r.vnn           = ctdb_get_vnn(client->ctdb);
-	r.num_connected = client->ctdb->num_connected;
+	r = ctdbd_allocate_pkt(client, sizeof(*r));
+	r->hdr.length     = sizeof(*r);
+	r->hdr.ctdb_magic = CTDB_MAGIC;
+	r->hdr.ctdb_version = CTDB_VERSION;
+	r->hdr.operation = CTDB_REPLY_CONNECT_WAIT;
+	r->vnn           = ctdb_get_vnn(client->ctdb);
+	r->num_connected = client->ctdb->num_connected;
 	
-	res = daemon_queue_send(client, &r.hdr);
+	res = daemon_queue_send(client, &r->hdr);
+	talloc_free(r);
 	if (res != 0) {
 		DEBUG(0,(__location__ " Failed to queue a connect wait response\n"));
 		return;



More information about the samba-cvs mailing list