svn commit: samba r12309 - in branches/SAMBA_4_0/source/wrepl_server: .

metze at samba.org metze at samba.org
Sat Dec 17 19:24:14 GMT 2005


Author: metze
Date: 2005-12-17 19:24:13 +0000 (Sat, 17 Dec 2005)
New Revision: 12309

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

Log:
fix a crash bug, which appens in an error case

metze
Modified:
   branches/SAMBA_4_0/source/wrepl_server/wrepl_out_push.c


Changeset:
Modified: branches/SAMBA_4_0/source/wrepl_server/wrepl_out_push.c
===================================================================
--- branches/SAMBA_4_0/source/wrepl_server/wrepl_out_push.c	2005-12-17 17:19:21 UTC (rev 12308)
+++ branches/SAMBA_4_0/source/wrepl_server/wrepl_out_push.c	2005-12-17 19:24:13 UTC (rev 12309)
@@ -40,19 +40,20 @@
 static void wreplsrv_push_handler_creq(struct composite_context *creq)
 {
 	struct wreplsrv_partner *partner = talloc_get_type(creq->async.private_data, struct wreplsrv_partner);
+	struct wreplsrv_push_notify_io *old_notify_io;
 
 	partner->push.last_status = wreplsrv_push_notify_recv(partner->push.creq);
 	partner->push.creq = NULL;
-	talloc_free(partner->push.notify_io);
+	partner->push.last_run = timeval_current();
+
+	old_notify_io = partner->push.notify_io;
 	partner->push.notify_io = NULL;
 
-	partner->push.last_run = timeval_current();
-
 	if (NT_STATUS_IS_OK(partner->push.last_status)) {
 		partner->push.error_count = 0;
 		DEBUG(2,("wreplsrv_push_notify(%s): %s\n",
 			 partner->address, nt_errstr(partner->push.last_status)));
-		return;
+		goto done;
 	}
 
 	partner->push.error_count++;
@@ -61,13 +62,15 @@
 		DEBUG(1,("wreplsrv_push_notify(%s): %s: error_count: %u: giving up\n",
 			 partner->address, nt_errstr(partner->push.last_status),
 			 partner->push.error_count));
-		return;
+		goto done;
 	}
 
 	DEBUG(1,("wreplsrv_push_notify(%s): %s: error_count: %u: retry\n",
 		 partner->address, nt_errstr(partner->push.last_status),
 		 partner->push.error_count));
-	wreplsrv_out_partner_push(partner, partner->push.notify_io->in.propagate);
+	wreplsrv_out_partner_push(partner, old_notify_io->in.propagate);
+done:
+	talloc_free(old_notify_io);
 }
 
 static void wreplsrv_out_partner_push(struct wreplsrv_partner *partner, BOOL propagate)



More information about the samba-cvs mailing list