diff --git a/src/modules/files/udp.c b/src/modules/files/udp.c
index 34aa271319349cbaa8a3428f5c7571ef124da25d..7e769aabb53ff0369b08ee485246c2b226e1df81 100644
--- a/src/modules/files/udp.c
+++ b/src/modules/files/udp.c
@@ -1,12 +1,12 @@
 /*
- * $Id: udp.c,v 1.2 1999/07/15 17:43:49 mirar Exp $
+ * $Id: udp.c,v 1.3 1999/07/19 23:36:00 grubba Exp $
  */
 
 #include "global.h"
 
 #include "file_machine.h"
 
-RCSID("$Id: udp.c,v 1.2 1999/07/15 17:43:49 mirar Exp $");
+RCSID("$Id: udp.c,v 1.3 1999/07/19 23:36:00 grubba Exp $");
 #include "fdlib.h"
 #include "interpret.h"
 #include "svalue.h"
@@ -212,11 +212,14 @@ void udp_read(INT32 args)
   }
   pop_n_elems(args);
   fd = FD;
-  THREADS_ALLOW();
-  while(((res = fd_recvfrom(fd, buffer, UDP_BUFFSIZE, flags,
-			 (struct sockaddr *)&from, &fromlen))==-1)
-	&&(errno==EINTR));
-  THREADS_DISALLOW();
+  do {
+    THREADS_ALLOW();
+    res = fd_recvfrom(fd, buffer, UDP_BUFFSIZE, flags,
+		      (struct sockaddr *)&from, &fromlen);
+    THREADS_DISALLOW();
+
+    check_threads_etc();
+  } while((res==-1) && (errno==EINTR));
 
   THIS->my_errno=errno;
 
@@ -307,10 +310,15 @@ void udp_sendto(INT32 args)
   fd = FD;
   str = sp[2-args].u.string->str;
   len = sp[2-args].u.string->len;
-  THREADS_ALLOW();
-  while(((res = fd_sendto( fd, str, len, flags, (struct sockaddr *)&to,
-		       sizeof( struct sockaddr_in ))) == -1) && errno==EINTR);
-  THREADS_DISALLOW();
+
+  do {
+    THREADS_ALLOW();
+    res = fd_sendto( fd, str, len, flags, (struct sockaddr *)&to,
+		     sizeof( struct sockaddr_in ));
+    THREADS_DISALLOW();
+
+    check_threads_etc();
+  } while((res == -1) && errno==EINTR);
   
   if(res<0)
   {