summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2002-04-19 02:20:04 +0000
committerJeremy Allison <jra@samba.org>2002-04-19 02:20:04 +0000
commite762f93821a21f460fecf7452d2363574ab04dad (patch)
tree3981a18546538f3a8bc2cd899c0b222b8c2e7cb7
parent87fc82801285a83b6e2e0faf85ca0984e939b088 (diff)
downloadsamba-e762f93821a21f460fecf7452d2363574ab04dad.tar.gz
samba-e762f93821a21f460fecf7452d2363574ab04dad.tar.bz2
samba-e762f93821a21f460fecf7452d2363574ab04dad.zip
Fixed sendto in oplock code.
Jeremy. (This used to be commit 64974fa334fd757ff5cfd1bd32d7300bf8a6208c)
-rw-r--r--source3/lib/system.c15
-rw-r--r--source3/smbd/oplock.c4
2 files changed, 17 insertions, 2 deletions
diff --git a/source3/lib/system.c b/source3/lib/system.c
index 61f93dd6a5..7734328795 100644
--- a/source3/lib/system.c
+++ b/source3/lib/system.c
@@ -118,6 +118,21 @@ ssize_t sys_send(int s, const void *msg, size_t len, int flags)
}
/*******************************************************************
+A sendto wrapper that will deal with EINTR.
+********************************************************************/
+
+ssize_t sys_sendto(int s, const void *msg, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)
+{
+ ssize_t ret;
+
+ do {
+ errno = 0;
+ ret = sendto(s, msg, len, flags, to, tolen);
+ } while (ret == -1 && errno == EINTR);
+ return ret;
+}
+
+/*******************************************************************
A recvfrom wrapper that will deal with EINTR.
********************************************************************/
diff --git a/source3/smbd/oplock.c b/source3/smbd/oplock.c
index 2f74c4cd8c..9469c05ec6 100644
--- a/source3/smbd/oplock.c
+++ b/source3/smbd/oplock.c
@@ -417,7 +417,7 @@ oplocks. Returning success.\n"));
toaddr.sin_port = htons(from_port);
toaddr.sin_family = AF_INET;
- if(sendto( oplock_sock, msg_start, OPLOCK_BREAK_MSG_LEN, 0,
+ if(sys_sendto( oplock_sock, msg_start, OPLOCK_BREAK_MSG_LEN, 0,
(struct sockaddr *)&toaddr, sizeof(toaddr)) < 0) {
DEBUG(0,("process_local_message: sendto process %d failed. Errno was %s\n",
(int)remotepid, strerror(errno)));
@@ -930,7 +930,7 @@ dev = %x, inode = %.0f, file_id = %lu and no fsp found !\n",
(unsigned int)dev, (double)inode, file_id );
}
- if(sendto(oplock_sock,op_break_msg,OPLOCK_BREAK_MSG_LEN,0,
+ if(sys_sendto(oplock_sock,op_break_msg,OPLOCK_BREAK_MSG_LEN,0,
(struct sockaddr *)&addr_out,sizeof(addr_out)) < 0) {
if( DEBUGLVL( 0 ) ) {
dbgtext( "request_oplock_break: failed when sending a oplock " );