Author: jerry Date: 2005-12-28 16:57:50 +0000 (Wed, 28 Dec 2005) New Revision: 12543
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=12543 Log: volker's fix for BUG 3349 (windows clients hang) Modified: branches/SAMBA_3_0_RELEASE/WHATSNEW.txt branches/SAMBA_3_0_RELEASE/source/smbd/close.c branches/SAMBA_3_0_RELEASE/source/smbd/open.c branches/SAMBA_3_0_RELEASE/source/smbd/oplock.c Changeset: Modified: branches/SAMBA_3_0_RELEASE/WHATSNEW.txt =================================================================== --- branches/SAMBA_3_0_RELEASE/WHATSNEW.txt 2005-12-28 15:38:36 UTC (rev 12542) +++ branches/SAMBA_3_0_RELEASE/WHATSNEW.txt 2005-12-28 16:57:50 UTC (rev 12543) @@ -1,13 +1,34 @@ - ============================== - Release Notes for Samba 3.0.21 - Dec 20, 2005 - ============================== + =============================== + Release Notes for Samba 3.0.21a + Dec 30, 2005 + =============================== This is the latest stable release of Samba. This is the version that production Samba servers should be running for all current bug-fixes. Please read the following important changes in this release. +###################################################################### +Changes +####### + +Changes since 3.0.21 +-------------------- + +commits +------- +o Volker Lendecke <[EMAIL PROTECTED]> + * BUG 3349: Deadlock caused logic error in oplock code. + + +Release Notes for older release follow: + + -------------------------------------------------- + ============================== + Release Notes for Samba 3.0.21 + Dec 20, 2005 + ============================== + Common bugs fixed in 3.0.21 include: o Missing groups in a user's token when logging in via kerberos Modified: branches/SAMBA_3_0_RELEASE/source/smbd/close.c =================================================================== --- branches/SAMBA_3_0_RELEASE/source/smbd/close.c 2005-12-28 15:38:36 UTC (rev 12542) +++ branches/SAMBA_3_0_RELEASE/source/smbd/close.c 2005-12-28 16:57:50 UTC (rev 12543) @@ -130,8 +130,10 @@ */ schedule_deferred_open_smb_message(e->op_mid); } else { + become_root(); message_send_pid(e->pid, MSG_SMB_OPEN_RETRY, e, sizeof(*e), True); + unbecome_root(); } } } Modified: branches/SAMBA_3_0_RELEASE/source/smbd/open.c =================================================================== --- branches/SAMBA_3_0_RELEASE/source/smbd/open.c 2005-12-28 15:38:36 UTC (rev 12542) +++ branches/SAMBA_3_0_RELEASE/source/smbd/open.c 2005-12-28 16:57:50 UTC (rev 12543) @@ -682,11 +682,15 @@ } if (delay_it) { + BOOL ret; DEBUG(10, ("Sending break request to PID %s\n", procid_str_static(&exclusive->pid))); exclusive->op_mid = get_current_mid(); - if (!message_send_pid(exclusive->pid, MSG_SMB_BREAK_REQUEST, - exclusive, sizeof(*exclusive), True)) { + become_root(); + ret = message_send_pid(exclusive->pid, MSG_SMB_BREAK_REQUEST, + exclusive, sizeof(*exclusive), True); + unbecome_root(); + if (!ret) { DEBUG(3, ("Could not send oplock break message\n")); } file_free(fsp); Modified: branches/SAMBA_3_0_RELEASE/source/smbd/oplock.c =================================================================== --- branches/SAMBA_3_0_RELEASE/source/smbd/oplock.c 2005-12-28 15:38:36 UTC (rev 12542) +++ branches/SAMBA_3_0_RELEASE/source/smbd/oplock.c 2005-12-28 16:57:50 UTC (rev 12543) @@ -398,8 +398,10 @@ * get to process this message, we have closed the file. Reply * with 'ok, oplock broken' */ DEBUG(3, ("Did not find fsp\n")); + become_root(); message_send_pid(src, MSG_SMB_BREAK_RESPONSE, msg, sizeof(*msg), True); + unbecome_root(); return; } @@ -418,8 +420,10 @@ DEBUG(3, ("Already downgraded oplock on %.0f/%.0f: %s\n", (double)fsp->dev, (double)fsp->inode, fsp->fsp_name)); + become_root(); message_send_pid(src, MSG_SMB_BREAK_RESPONSE, msg, sizeof(*msg), True); + unbecome_root(); return; } @@ -545,11 +549,13 @@ { int i; + become_root(); for (i=0; i<fsp->num_pending_break_messages; i++) { struct share_mode_entry *msg = &fsp->pending_break_messages[i]; message_send_pid(msg->pid, MSG_SMB_BREAK_RESPONSE, msg, sizeof(*msg), True); } + unbecome_root(); SAFE_FREE(fsp->pending_break_messages); fsp->num_pending_break_messages = 0; @@ -686,8 +692,10 @@ abort(); } + become_root(); message_send_pid(share_entry->pid, MSG_SMB_ASYNC_LEVEL2_BREAK, share_entry, sizeof(*share_entry), True); + unbecome_root(); } remove_all_share_oplocks(lck, fsp);
