mirror of
https://github.com/samba-team/samba.git
synced 2025-01-26 10:04:02 +03:00
s3: Fix a deadlock between smbd and ctdbd
Do the notification after we released the share mode lock. Inside notify_fname we take out another tdb lock. With ctdb also accessing our databases, this can lead to deadlocks. Putting this notify after the TALLOC_FREE(lck) above we avoid locking two records simultaneously. Notifies are async and informational only, so calling the notify_fname without holding the share mode lock should not do any harm. Autobuild-User: Volker Lendecke <vlendec@samba.org> Autobuild-Date: Fri Jan 21 12:29:21 CET 2011 on sn-devel-104
This commit is contained in:
parent
8db3258983
commit
1b373d6044
@ -473,10 +473,6 @@ static NTSTATUS close_remove_share_mode(files_struct *fsp,
|
||||
status = map_nt_error_from_unix(errno);
|
||||
}
|
||||
|
||||
notify_fname(conn, NOTIFY_ACTION_REMOVED,
|
||||
FILE_NOTIFY_CHANGE_FILE_NAME,
|
||||
fsp->fsp_name->base_name);
|
||||
|
||||
/* As we now have POSIX opens which can unlink
|
||||
* with other open files we may have taken
|
||||
* this code path with more than one share mode
|
||||
@ -495,6 +491,24 @@ static NTSTATUS close_remove_share_mode(files_struct *fsp,
|
||||
}
|
||||
|
||||
TALLOC_FREE(lck);
|
||||
|
||||
if (delete_file) {
|
||||
/*
|
||||
* Do the notification after we released the share
|
||||
* mode lock. Inside notify_fname we take out another
|
||||
* tdb lock. With ctdb also accessing our databases,
|
||||
* this can lead to deadlocks. Putting this notify
|
||||
* after the TALLOC_FREE(lck) above we avoid locking
|
||||
* two records simultaneously. Notifies are async and
|
||||
* informational only, so calling the notify_fname
|
||||
* without holding the share mode lock should not do
|
||||
* any harm.
|
||||
*/
|
||||
notify_fname(conn, NOTIFY_ACTION_REMOVED,
|
||||
FILE_NOTIFY_CHANGE_FILE_NAME,
|
||||
fsp->fsp_name->base_name);
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user