svn commit: samba r9126 - in branches/SAMBA_3_0/source/smbd: .

jra at samba.org jra at samba.org
Fri Aug 5 17:10:13 GMT 2005


Author: jra
Date: 2005-08-05 17:10:10 +0000 (Fri, 05 Aug 2005)
New Revision: 9126

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

Log:
Fix valgrind bug Volker found in interaction with new aio buffer
flipping and oplocks.
Jeremy.

Modified:
   branches/SAMBA_3_0/source/smbd/oplock.c
   branches/SAMBA_3_0/source/smbd/process.c


Changeset:
Modified: branches/SAMBA_3_0/source/smbd/oplock.c
===================================================================
--- branches/SAMBA_3_0/source/smbd/oplock.c	2005-08-05 17:10:07 UTC (rev 9125)
+++ branches/SAMBA_3_0/source/smbd/oplock.c	2005-08-05 17:10:10 UTC (rev 9126)
@@ -757,8 +757,9 @@
 
 	if((outbuf = NewOutBuffer(&saved_outbuf))==NULL) {
 		DEBUG(0,("oplock_break: malloc fail for output buffer.\n"));
+		/* Free must be done before set.. */
+		free_InBuffer(inbuf);
 		set_InBuffer(saved_inbuf);
-		free_InBuffer(inbuf);
 		return False;
 	}
 
@@ -918,14 +919,15 @@
 	/* Restore the chain fnum. */
 	file_chain_restore();
 
+	/* Free the buffers we've been using to recurse. */
+	/* Free must be done before set.. */
+	free_InBuffer(inbuf);
+	free_OutBuffer(outbuf);
+
 	/* Restore the global In/Out buffers. */
 	set_InBuffer(saved_inbuf);
 	set_OutBuffer(saved_outbuf);
 
-	/* Free the buffers we've been using to recurse. */
-	free_InBuffer(inbuf);
-	free_OutBuffer(outbuf);
-
 	/* We need this in case a readraw crossed on the wire. */
 	if(global_oplock_break)
 		global_oplock_break = False;

Modified: branches/SAMBA_3_0/source/smbd/process.c
===================================================================
--- branches/SAMBA_3_0/source/smbd/process.c	2005-08-05 17:10:07 UTC (rev 9125)
+++ branches/SAMBA_3_0/source/smbd/process.c	2005-08-05 17:10:10 UTC (rev 9126)
@@ -1527,6 +1527,7 @@
 void set_InBuffer(char *new_inbuf)
 {
 	InBuffer = new_inbuf;
+	current_inbuf = InBuffer;
 }
 
 char *get_OutBuffer(void)
@@ -1547,6 +1548,9 @@
 void free_InBuffer(char *inbuf)
 {
 	if (!aio_inbuffer_in_use(inbuf)) {
+		if (current_inbuf == inbuf) {
+			current_inbuf = NULL;
+		}
 		SAFE_FREE(inbuf);
 	}
 }



More information about the samba-cvs mailing list