r9126: Fix valgrind bug Volker found in interaction with new aio buffer
[obnox/samba-ctdb.git] / source3 / smbd / oplock.c
index de1200398674bf6e5e70266c5f954cad3ce3841b..c0c9e989a9970abe5938e7c5bdc482adc7ec8077 100644 (file)
@@ -757,8 +757,9 @@ static BOOL oplock_break(SMB_DEV_T dev, SMB_INO_T inode, unsigned long file_id,
 
        if((outbuf = NewOutBuffer(&saved_outbuf))==NULL) {
                DEBUG(0,("oplock_break: malloc fail for output buffer.\n"));
-               set_InBuffer(saved_inbuf);
+               /* Free must be done before set.. */
                free_InBuffer(inbuf);
+               set_InBuffer(saved_inbuf);
                return False;
        }
 
@@ -918,14 +919,15 @@ static BOOL oplock_break(SMB_DEV_T dev, SMB_INO_T inode, unsigned long file_id,
        /* Restore the chain fnum. */
        file_chain_restore();
 
-       /* Restore the global In/Out buffers. */
-       set_InBuffer(saved_inbuf);
-       set_OutBuffer(saved_outbuf);
-
        /* 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);
+
        /* We need this in case a readraw crossed on the wire. */
        if(global_oplock_break)
                global_oplock_break = False;