From c4789521d5e724e45c5881f74d55daf7ac59eb40 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Tue, 19 Oct 2010 08:53:21 +0200 Subject: [PATCH] s3: Cope with EINTR in smbd_[un]lock_socket --- source3/smbd/process.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/source3/smbd/process.c b/source3/smbd/process.c index cf50417cff..16ed0f60b7 100644 --- a/source3/smbd/process.c +++ b/source3/smbd/process.c @@ -36,8 +36,12 @@ bool smbd_lock_socket(struct smbd_server_connection *sconn) DEBUG(10,("pid[%d] wait for socket lock\n", (int)sys_getpid())); - ok = fcntl_lock(smbd_server_conn->smb1.echo_handler.socket_lock_fd, + do { + ok = fcntl_lock( + smbd_server_conn->smb1.echo_handler.socket_lock_fd, SMB_F_SETLKW, 0, 0, F_WRLCK); + } while (!ok && (errno == EINTR)); + if (!ok) { return false; } @@ -55,8 +59,12 @@ bool smbd_unlock_socket(struct smbd_server_connection *sconn) return true; } - ok = fcntl_lock(smbd_server_conn->smb1.echo_handler.socket_lock_fd, + do { + ok = fcntl_lock( + smbd_server_conn->smb1.echo_handler.socket_lock_fd, SMB_F_SETLKW, 0, 0, F_UNLCK); + } while (!ok && (errno == EINTR)); + if (!ok) { return false; } -- 2.34.1