summaryrefslogtreecommitdiff
path: root/source3/smbd/oplock.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>1998-10-21 00:31:14 +0000
committerAndrew Tridgell <tridge@samba.org>1998-10-21 00:31:14 +0000
commit053d6c605caebf5ed61b86f320da6a35f0c5257f (patch)
treee6b16f09eb8c9a74565d683eafeb846c4a677c92 /source3/smbd/oplock.c
parentd8f0e60195ff8447df9235f60095c4e2bb4561e7 (diff)
downloadsamba-053d6c605caebf5ed61b86f320da6a35f0c5257f.tar.gz
samba-053d6c605caebf5ed61b86f320da6a35f0c5257f.tar.bz2
samba-053d6c605caebf5ed61b86f320da6a35f0c5257f.zip
at the interop Isaac (at least I _think_ it was Isaac) said that if a
MS client doesn't respond to a oplock break request then we might try resending the request. This morning Sues Win95 machine had this problem (thus forcing me to do something about it!). When starting winword her box refused to answer an oplock break request. I have added code to resend the oplock break request up to 3 times at 10 second intervals before killing the socket. of course, as soon as I did this her box started to behave again so I haven't been able to tell if this fix actually works, but it can't be worse than dropping the socket immediately. (This used to be commit a1c4d8351b9171416693e6d7a9045bdce9217edb)
Diffstat (limited to 'source3/smbd/oplock.c')
-rw-r--r--source3/smbd/oplock.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/source3/smbd/oplock.c b/source3/smbd/oplock.c
index b1c6d9a981..03feae3a98 100644
--- a/source3/smbd/oplock.c
+++ b/source3/smbd/oplock.c
@@ -545,6 +545,7 @@ static BOOL oplock_break(SMB_DEV_T dev, SMB_INO_T inode, struct timeval *tval)
connection_struct *saved_conn;
int saved_vuid;
pstring saved_dir;
+ int break_counter = OPLOCK_BREAK_RESENDS;
if( DEBUGLVL( 3 ) )
{
@@ -671,8 +672,20 @@ static BOOL oplock_break(SMB_DEV_T dev, SMB_INO_T inode, struct timeval *tval)
while(OPEN_FSP(fsp) && fsp->granted_oplock)
{
- if(receive_smb(Client,inbuf,OPLOCK_BREAK_TIMEOUT * 1000) == False)
+ if(receive_smb(Client,inbuf,
+ (OPLOCK_BREAK_TIMEOUT/OPLOCK_BREAK_RESENDS) * 1000) == False)
{
+
+ /* Isaac suggestd that if a MS client doesn't respond to a
+ oplock break request then we might try resending
+ it. Certainly it's no worse than just dropping the
+ socket! */
+ if (smb_read_error == READ_TIMEOUT && break_counter--) {
+ DEBUG(2, ( "oplock_break resend\n" ) );
+ send_smb(Client, outbuf);
+ continue;
+ }
+
/*
* Die if we got an error.
*/