summaryrefslogtreecommitdiff
path: root/source3/smbd
diff options
context:
space:
mode:
Diffstat (limited to 'source3/smbd')
-rw-r--r--source3/smbd/oplock_linux.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/source3/smbd/oplock_linux.c b/source3/smbd/oplock_linux.c
index 190578e0cc..7fa9b7cb2c 100644
--- a/source3/smbd/oplock_linux.c
+++ b/source3/smbd/oplock_linux.c
@@ -76,9 +76,22 @@ int linux_setlease(int fd, int leasetype)
{
int ret;
+ /* First set the signal handler. */
+ if (linux_set_lease_sighandler(fd) == -1) {
+ return -1;
+ }
ret = fcntl(fd, F_SETLEASE, leasetype);
if (ret == -1 && errno == EACCES) {
set_effective_capability(LEASE_CAPABILITY);
+ /*
+ * Bug 8974 - work around Linux kernel bug
+ * https://bugzilla.kernel.org/show_bug.cgi?id=43336.
+ * "fcntl(F_SETLEASE) resets signal number when
+ * called multiple times"
+ */
+ if (linux_set_lease_sighandler(fd) == -1) {
+ return -1;
+ }
ret = fcntl(fd, F_SETLEASE, leasetype);
}