Index: trunk/src/sh_calls.c
===================================================================
--- trunk/src/sh_calls.c	(revision 314)
+++ trunk/src/sh_calls.c	(revision 315)
@@ -52,4 +52,6 @@
 #include "sh_calls.h"
 #include "sh_ipvx.h"
+#include "sh_sub.h"
+#include "sh_utils.h"
 
 #undef  FIL__
@@ -240,4 +242,11 @@
 }
 
+static int sh_use_sub = 0;
+
+int sh_calls_set_sub (const char * str)
+{
+  return sh_util_flagval(str, &sh_use_sub);
+}
+
 long int retry_lstat(const char * file, int line, 
 		     const char *file_name, struct stat *buf)
@@ -249,7 +258,15 @@
   SL_ENTER(_("retry_lstat"));
 
-  do {
-    val_retry = /*@-unrecog@*/lstat (file_name, buf)/*@+unrecog@*/;
-  } while (val_retry < 0 && errno == EINTR);
+  if (sh_use_sub)
+    {
+      val_retry = sh_sub_lstat (file_name, buf);
+    }
+  else
+    {
+      do {
+	val_retry = /*@-unrecog@*/lstat (file_name, buf)/*@+unrecog@*/;
+      } while (val_retry < 0 && errno == EINTR);
+    }
+
   error = errno;
   if (val_retry < 0) {
@@ -260,4 +277,5 @@
   }
   errno = error;    
+
   SL_RETURN(val_retry, _("retry_lstat"));
 }
@@ -272,7 +290,15 @@
   SL_ENTER(_("retry_stat"));
 
-  do {
-    val_retry = stat (file_name, buf);
-  } while (val_retry < 0 && errno == EINTR);
+  if (sh_use_sub)
+    {
+      val_retry = sh_sub_stat (file_name, buf);
+    }
+  else
+    {
+      do {
+	val_retry = stat (file_name, buf);
+      } while (val_retry < 0 && errno == EINTR);
+    }
+
   error = errno;
   if (val_retry < 0) {
@@ -283,4 +309,5 @@
   }
   errno = error;    
+
   SL_RETURN(val_retry, _("retry_stat"));
 }
Index: trunk/src/sh_forward.c
===================================================================
--- trunk/src/sh_forward.c	(revision 314)
+++ trunk/src/sh_forward.c	(revision 315)
@@ -4862,4 +4862,8 @@
   int flag   = 1; /* non-zero to enable an option */
 
+  /* fprintf(stderr, "FIXME IPVX: bind addr %s (%d) :%d\n", 
+	  sh_ipvx_print_sockaddr (sa, domain), salen,
+	  sh_ipvx_get_port(sa, domain)); */
+
   /* create the socket, bind() it and listen()
    */
@@ -4940,4 +4944,5 @@
       hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG;
       hints.ai_socktype = SOCK_STREAM;
+      hints.ai_family   = AF_UNSPEC;
       sl_snprintf(port, sizeof(port), "%d", server_port);
 
Index: trunk/src/sh_port2proc.c
===================================================================
--- trunk/src/sh_port2proc.c	(revision 314)
+++ trunk/src/sh_port2proc.c	(revision 315)
@@ -422,5 +422,5 @@
 
 		sh_ipvx_ntoa(a, sizeof(a), &ss);
-		sh_ipvx_ntoa(b, sizeof(b), &ss);
+		sh_ipvx_ntoa(b, sizeof(b), saddr);
 
 		fprintf(stderr, " -> inode %u, iface/port %s,%u, status %u, searching %s,%u, %u\n", 
Index: trunk/src/sh_pthread.c
===================================================================
--- trunk/src/sh_pthread.c	(revision 314)
+++ trunk/src/sh_pthread.c	(revision 315)
@@ -15,4 +15,9 @@
 SH_MUTEX_INIT(mutex_readdir,      PTHREAD_MUTEX_INITIALIZER);
 SH_MUTEX_INIT(mutex_thread_nolog, PTHREAD_MUTEX_INITIALIZER);
+
+int sh_pthread_setsigmask(int how, const void *set, void *oldset)
+{
+  return pthread_sigmask(how, (const sigset_t *)set, (sigset_t *)oldset);
+}
 
 void sh_pthread_mutex_unlock (void *arg)
@@ -288,4 +293,13 @@
 #endif
 
+#else
+
+#include <signal.h>
+
+int sh_pthread_setsigmask(int how, const void *set, void *oldset)
+{
+  return sigprocmask(how, (const sigset_t *)set, (sigset_t *)oldset);
+}
+
 
 #endif
Index: trunk/src/sh_readconf.c
===================================================================
--- trunk/src/sh_readconf.c	(revision 314)
+++ trunk/src/sh_readconf.c	(revision 315)
@@ -1227,4 +1227,7 @@
     sh_util_sigtype },
 
+  { N_("avoidblock"),     SH_SECTION_MISC,  SH_SECTION_NONE, 
+    sh_calls_set_sub },
+
   { NULL,    0,   0,  NULL}
 };
Index: trunk/src/sh_socket.c
===================================================================
--- trunk/src/sh_socket.c	(revision 314)
+++ trunk/src/sh_socket.c	(revision 315)
@@ -683,5 +683,5 @@
       {
 	++retry;
-	retry_msleep(0, 1);
+	retry_msleep(0, 10);
       }
   } while ((nbytes < 0) && (retry < 3));
Index: trunk/src/sh_unix.c
===================================================================
--- trunk/src/sh_unix.c	(revision 314)
+++ trunk/src/sh_unix.c	(revision 315)
@@ -1529,5 +1529,5 @@
   do {
     errno = 0;
-    test  = sigprocmask(SIG_UNBLOCK, &set_proc, NULL);
+    test  = SH_SETSIGMASK(SIG_UNBLOCK, &set_proc, NULL);
   } while (test < 0 && errno == EINTR);
 
