diff options
Diffstat (limited to 'source3/smbd/oplock.c')
-rw-r--r-- | source3/smbd/oplock.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/source3/smbd/oplock.c b/source3/smbd/oplock.c index de12003986..c0c9e989a9 100644 --- a/source3/smbd/oplock.c +++ b/source3/smbd/oplock.c @@ -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; |