svn commit: samba r22117 - in branches/SAMBA_4_0/source/cluster/ctdb: common include

tridge at samba.org tridge at samba.org
Sat Apr 7 01:00:11 GMT 2007


Author: tridge
Date: 2007-04-07 01:00:11 +0000 (Sat, 07 Apr 2007)
New Revision: 22117

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=22117

Log:
merged from bzr
Modified:
   branches/SAMBA_4_0/source/cluster/ctdb/common/ctdb.c
   branches/SAMBA_4_0/source/cluster/ctdb/common/ctdb_call.c
   branches/SAMBA_4_0/source/cluster/ctdb/common/ctdb_ltdb.c
   branches/SAMBA_4_0/source/cluster/ctdb/common/ctdb_message.c
   branches/SAMBA_4_0/source/cluster/ctdb/include/ctdb_private.h


Changeset:
Modified: branches/SAMBA_4_0/source/cluster/ctdb/common/ctdb.c
===================================================================
--- branches/SAMBA_4_0/source/cluster/ctdb/common/ctdb.c	2007-04-07 00:57:26 UTC (rev 22116)
+++ branches/SAMBA_4_0/source/cluster/ctdb/common/ctdb.c	2007-04-07 01:00:11 UTC (rev 22117)
@@ -246,9 +246,9 @@
 
 	default:
 		printf("Packet with unknown operation %d\n", hdr->operation);
-		talloc_free(hdr);
 		break;
 	}
+	talloc_free(hdr);
 }
 
 /*

Modified: branches/SAMBA_4_0/source/cluster/ctdb/common/ctdb_call.c
===================================================================
--- branches/SAMBA_4_0/source/cluster/ctdb/common/ctdb_call.c	2007-04-07 00:57:26 UTC (rev 22116)
+++ branches/SAMBA_4_0/source/cluster/ctdb/common/ctdb_call.c	2007-04-07 01:00:11 UTC (rev 22117)
@@ -56,11 +56,13 @@
 	}
 	if (fn == NULL) {
 		ctdb_set_error(ctdb, "Unknown call id %u\n", call->call_id);
+		talloc_free(c);
 		return -1;
 	}
 
 	if (fn->fn(c) != 0) {
 		ctdb_set_error(ctdb, "ctdb_call %u failed\n", call->call_id);
+		talloc_free(c);
 		return -1;
 	}
 
@@ -79,6 +81,7 @@
 	if (c->new_data) {
 		if (ctdb_ltdb_store(ctdb_db, call->key, header, *c->new_data) != 0) {
 			ctdb_set_error(ctdb, "ctdb_call tdb_store failed\n");
+			talloc_free(c);
 			return -1;
 		}
 	}
@@ -123,6 +126,7 @@
 	len = offsetof(struct ctdb_reply_error, msg);
 	r = ctdb->methods->allocate_pkt(ctdb, len + msglen);
 	CTDB_NO_MEMORY_FATAL(ctdb, r);
+	talloc_set_name_const(r, "send_error packet");
 
 	r->hdr.length    = len + msglen;
 	r->hdr.ctdb_magic = CTDB_MAGIC;
@@ -154,6 +158,7 @@
 
 	r = ctdb->methods->allocate_pkt(ctdb, sizeof(*r));
 	CTDB_NO_MEMORY_FATAL(ctdb, r);
+	talloc_set_name_const(r, "send_redirect packet");
 	r->hdr.length = sizeof(*r);
 	r->hdr.ctdb_magic = CTDB_MAGIC;
 	r->hdr.ctdb_version = CTDB_VERSION;
@@ -187,6 +192,7 @@
 	len = offsetof(struct ctdb_req_dmaster, data) + key->dsize + data->dsize;
 	r = ctdb->methods->allocate_pkt(ctdb, len);
 	CTDB_NO_MEMORY_FATAL(ctdb, r);
+	talloc_set_name_const(r, "send_dmaster packet");
 	r->hdr.length    = len;
 	r->hdr.ctdb_magic = CTDB_MAGIC;
 	r->hdr.ctdb_version = CTDB_VERSION;
@@ -247,7 +253,7 @@
 	}
 	
 	/* fetch the current record */
-	ret = ctdb_ltdb_fetch(ctdb_db, key, &header, &data2);
+	ret = ctdb_ltdb_fetch(ctdb_db, key, &header, hdr, &data2);
 	if (ret != 0) {
 		ctdb_fatal(ctdb, "ctdb_req_dmaster failed to fetch record");
 		return;
@@ -269,6 +275,7 @@
 	len = offsetof(struct ctdb_reply_dmaster, data) + data.dsize;
 	r = ctdb->methods->allocate_pkt(ctdb, len);
 	CTDB_NO_MEMORY_FATAL(ctdb, r);
+	talloc_set_name_const(r, "reply_dmaster packet");
 	r->hdr.length    = len;
 	r->hdr.ctdb_magic = CTDB_MAGIC;
 	r->hdr.ctdb_version = CTDB_VERSION;
@@ -322,7 +329,7 @@
 	   fetches the record data (if any), thus avoiding a 2nd fetch of the data 
 	   if the call will be answered locally */
 
-	ret = ctdb_ltdb_fetch(ctdb_db, call.key, &header, &data);
+	ret = ctdb_ltdb_fetch(ctdb_db, call.key, &header, hdr, &data);
 	if (ret != 0) {
 		ctdb_send_error(ctdb, hdr, ret, "ltdb fetch failed in ctdb_request_call");
 		return;
@@ -353,6 +360,7 @@
 	len = offsetof(struct ctdb_reply_call, data) + call.reply_data.dsize;
 	r = ctdb->methods->allocate_pkt(ctdb, len);
 	CTDB_NO_MEMORY_FATAL(ctdb, r);
+	talloc_set_name_const(r, "reply_call packet");
 	r->hdr.length    = len;
 	r->hdr.ctdb_magic = CTDB_MAGIC;
 	r->hdr.ctdb_version = CTDB_VERSION;
@@ -539,6 +547,8 @@
 	state = talloc_zero(ctdb_db, struct ctdb_call_state);
 	CTDB_NO_MEMORY_NULL(ctdb, state);
 
+	talloc_steal(state, data->dptr);
+
 	state->state = CTDB_CALL_DONE;
 	state->node = ctdb->nodes[ctdb->vnn];
 	state->call = *call;
@@ -571,7 +581,7 @@
 	  locally. To find out if we are the dmaster we need to look
 	  in our ltdb
 	*/
-	ret = ctdb_ltdb_fetch(ctdb_db, call->key, &header, &data);
+	ret = ctdb_ltdb_fetch(ctdb_db, call->key, &header, ctdb_db, &data);
 	if (ret != 0) return NULL;
 
 	if (header.dmaster == ctdb->vnn && !(ctdb->flags & CTDB_FLAG_SELF_CONNECT)) {
@@ -581,9 +591,13 @@
 	state = talloc_zero(ctdb_db, struct ctdb_call_state);
 	CTDB_NO_MEMORY_NULL(ctdb, state);
 
+	talloc_steal(state, data.dptr);
+
 	len = offsetof(struct ctdb_req_call, data) + call->key.dsize + call->call_data.dsize;
 	state->c = ctdb->methods->allocate_pkt(ctdb, len);
 	CTDB_NO_MEMORY_NULL(ctdb, state->c);
+	talloc_set_name_const(state->c, "req_call packet");
+	talloc_steal(state, state->c);
 
 	state->c->hdr.length    = len;
 	state->c->hdr.ctdb_magic = CTDB_MAGIC;
@@ -650,8 +664,7 @@
 
 	/* ugly hack to manage forced migration */
 	if (rec != NULL) {
-		rec->data->dptr = talloc_memdup(rec, state->call.reply_data.dptr,
-						     state->call.reply_data.dsize);
+		rec->data->dptr = talloc_steal(rec, state->call.reply_data.dptr);
 		rec->data->dsize = state->call.reply_data.dsize;
 		talloc_free(state);
 		return 0;
@@ -726,7 +739,7 @@
 	struct ctdb_ltdb_header header;
 
 	/* should be avoided if possible    hang header off rec ? */
-	ret = ctdb_ltdb_fetch(rec->ctdb_db, rec->key, &header, NULL);
+	ret = ctdb_ltdb_fetch(rec->ctdb_db, rec->key, &header, NULL, NULL);
 	if (ret) {
 		ctdb_set_error(rec->ctdb_db->ctdb, "Fetch of locally held record failed");
 		return ret;

Modified: branches/SAMBA_4_0/source/cluster/ctdb/common/ctdb_ltdb.c
===================================================================
--- branches/SAMBA_4_0/source/cluster/ctdb/common/ctdb_ltdb.c	2007-04-07 00:57:26 UTC (rev 22116)
+++ branches/SAMBA_4_0/source/cluster/ctdb/common/ctdb_ltdb.c	2007-04-07 01:00:11 UTC (rev 22117)
@@ -137,7 +137,8 @@
   returned if the record is not present
 */
 int ctdb_ltdb_fetch(struct ctdb_db_context *ctdb_db, 
-		    TDB_DATA key, struct ctdb_ltdb_header *header, TDB_DATA *data)
+		    TDB_DATA key, struct ctdb_ltdb_header *header, 
+		    TALLOC_CTX *mem_ctx, TDB_DATA *data)
 {
 	TDB_DATA rec;
 	struct ctdb_context *ctdb = ctdb_db->ctdb;
@@ -158,7 +159,8 @@
 
 	if (data) {
 		data->dsize = rec.dsize - sizeof(struct ctdb_ltdb_header);
-		data->dptr = talloc_memdup(ctdb_db, sizeof(struct ctdb_ltdb_header)+rec.dptr,
+		data->dptr = talloc_memdup(mem_ctx, 
+					   sizeof(struct ctdb_ltdb_header)+rec.dptr,
 					   data->dsize);
 	}
 

Modified: branches/SAMBA_4_0/source/cluster/ctdb/common/ctdb_message.c
===================================================================
--- branches/SAMBA_4_0/source/cluster/ctdb/common/ctdb_message.c	2007-04-07 00:57:26 UTC (rev 22116)
+++ branches/SAMBA_4_0/source/cluster/ctdb/common/ctdb_message.c	2007-04-07 01:00:11 UTC (rev 22117)
@@ -40,13 +40,11 @@
 	TDB_DATA data;
 	if (ctdb->message_handler == NULL) {
 		/* no registered message handler */
-		talloc_free(hdr);
 		return;
 	}
 	data.dptr = &c->data[0];
 	data.dsize = c->datalen;
 	ctdb->message_handler(ctdb, c->srvid, data, ctdb->message_private);
-	talloc_free(hdr);
 }
 
 
@@ -62,6 +60,7 @@
 	len = offsetof(struct ctdb_req_message, data) + data.dsize;
 	r = ctdb->methods->allocate_pkt(ctdb, len);
 	CTDB_NO_MEMORY(ctdb, r);
+	talloc_set_name_const(r, "req_message packet");
 
 	r->hdr.length    = len;
 	r->hdr.ctdb_magic = CTDB_MAGIC;

Modified: branches/SAMBA_4_0/source/cluster/ctdb/include/ctdb_private.h
===================================================================
--- branches/SAMBA_4_0/source/cluster/ctdb/include/ctdb_private.h	2007-04-07 00:57:26 UTC (rev 22116)
+++ branches/SAMBA_4_0/source/cluster/ctdb/include/ctdb_private.h	2007-04-07 01:00:11 UTC (rev 22117)
@@ -240,7 +240,8 @@
 
 uint32_t ctdb_lmaster(struct ctdb_context *ctdb, const TDB_DATA *key);
 int ctdb_ltdb_fetch(struct ctdb_db_context *ctdb_db, 
-		    TDB_DATA key, struct ctdb_ltdb_header *header, TDB_DATA *data);
+		    TDB_DATA key, struct ctdb_ltdb_header *header, 
+		    TALLOC_CTX *mem_ctx, TDB_DATA *data);
 int ctdb_ltdb_store(struct ctdb_db_context *ctdb_db, TDB_DATA key, 
 		    struct ctdb_ltdb_header *header, TDB_DATA data);
 void ctdb_queue_packet(struct ctdb_context *ctdb, struct ctdb_req_header *hdr);



More information about the samba-cvs mailing list